索引查询
1 语法
name:lucene”表示查询Field的name为“lucene”的文档信息
2 查询
-
TermQuery
- 根据关键词进行查询
- 需要制定查询的域以及要查询的关键词
-
RangeQuery
- 范围查询
-
QueryPaser
- 可以对要查询的内容先分词,然后基于分词的结果进行查询
-
代码
public class SearchIndex {
private IndexReader indexReader;
private IndexSearcher indexSearcher;
@Before
public void init() throws Exception {
indexReader = DirectoryReader.open(FSDirectory.open(new File("F:\\学习文档\\框架10 lucene\\index").toPath()));
indexSearcher = new IndexSearcher(indexReader);
}
@After
public void after() throws Exception {
if(indexReader != null){
indexReader.close();
}
}
@Test
//查询索引 Query
public void searchIndex() throws Exception {
Query query = new TermQuery(new Term("name", "香港"));
printResult(query);
}
// 范围查询
@Test
public void testRangeQuery() throws Exception {
Query query = LongPoint.newRangeQuery("size", 0, 100);
printResult(query);
}
// 分词查询
@Test
public void testQueryParser() throws Exception {
//创建一个QueryParser对象,两个参数
QueryParser queryParser = new QueryParser("name", new IKAnalyzer());
//参数1:默认搜索域, 参数2:分析器对象
//使用QueryPaser对象创建一个Query对象
Query query = queryParser.parse("lucene是一个Java开发的全文检索工具包");
//执行查询
printResult(query);
}
private void printResult(Query query) throws Exception{
TopDocs topDocs = indexSearcher.search(query, 10);
System.out.println("总记录数:"+topDocs.totalHits);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (ScoreDoc sc: scoreDocs) {
// 取文档id
int docId = sc.doc;
System.out.println(docId);
// 根据id取文档对象
Document document = indexSearcher.doc(docId);
System.out.println(document.get("name"));
System.out.println(document.get("path"));
System.out.println(document.get("size"));
System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=寂寞的分割线");
}
}
}