创建搜索, 搜索文档
package com.zero.lucene;
import java.nio.file.Paths;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
public class Searcher {
/**
* 在索引文件中搜索内容
* @param indexDir 索引文件地址
* @param q 搜索的条件
* @throws Exception
*/
public void search(String indexDir, String q) throws Exception {
Directory dir = FSDirectory.open(Paths.get(indexDir));
IndexReader indexReader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(indexReader);
// 分词
Analyzer analyzer = new StandardAnalyzer();
// @parms contents : 建立索引的时候的key
QueryParser parser = new QueryParser("contents", analyzer);
// 解析条件
Query query = parser.parse(q);
// 查询 10: 代表只是查询前面的10条数据
TopDocs docs = searcher.search(query, 10);
// 循环得到每一条数据
for (ScoreDoc scoreDoc : docs.scoreDocs) {
int docId = scoreDoc.doc;
Document doc = searcher.doc(docId);
String fileName = doc.get("fileName");
System.out.println("所在文件地址: " + fileName);
}
indexReader.close();
}
public static void main(String[] args) throws Exception{
String indexDir = "/Users/samuel/Documents/lucene";
String q = "1953118546";
Searcher search = new Searcher();
search.search(indexDir, q);
}
}

本文介绍了一个基于Lucene的搜索应用实现方法,通过Java代码演示如何创建搜索器并使用标准分析器进行分词处理,实现对索引文件的有效搜索。文章详细展示了如何构建查询条件、执行搜索操作以及获取并展示搜索结果。
1522

被折叠的 条评论
为什么被折叠?



