创建搜索, 搜索文档
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);
}
}