查询简介
- lucene的文档搜索条件通过Query对象完成
IndexReader reader = DirectoryReader.open(FSDirectory.open(Paths.get("index")));
IndexSearcher searcher = new IndexSearcher(reader);
Query query = new TermQuery(new Term("name", "zby"));
TopDocs topDocs = searcher.search(query, 100);
System.out.println(topDocs.totalHits);
- lucene提供了两种方式创建Query对象:API方式和解析表达式
- API方式直接创建Query子类对象即可,如
Query query=new TermQuery(new Term("name", "zby"));
- 解析表达式通过QueryParser完成,QueryParser是通过JavaCC生成,通过parse方法解析表达式生产Query对象,如
Analyzer analyzer=new StandardAnalyzer();
QueryParser parser = new QueryParser("name", analyzer);
Query query = parser.parse("zby");
- API方式创建查询可以通过查看Query的类继承结构分析可用的查询方式,不过比较麻烦,没有系统文档说明
- 解析表达式和API方式实际上是殊途同归,可以互相转换的,并且解析表达式官方有详细文档,掌握了解析表达式也就掌握可API,因此重点看如何通过解析表达式创建Query对象
QueryParser
-
A simple query parser implemented with JavaCC.
JavaCC
-
Java Compiler Compiler