我是初学者,开始学习Lucene。目前我已经在lucene 6.0.2中实现了Count Facets程序,它显示或输出所有facets字段计数。但是现在,想要搜索一个城市“加利福尼亚”,结果中它将显示此查询的所有方面计数,如何执行此操作...
这是代码:
public List<FacetResult> runSearch() throws IOException {
DirectoryReader indexReader = DirectoryReader.open(indexDir);
IndexSearcher searcher = new IndexSearcher(indexReader);
TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir);
FacetsConfig config = new FacetsConfig();
FacetsCollector fc = new FacetsCollector();
FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, fc);
List<FacetResult> results = new ArrayList<>();
Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc);
results.add(facets.getTopChildren(10, "city"));
results.add(facets.getTopChildren(10, "make"));
results.add(facets.getTopChildren(10, "year"));
results.add(facets.getTopChildren(10, "model"));
indexReader.close();
taxoReader.close();
return results;
}
最佳答案
从您的示例中我得知您在第一次搜索中搜索了*。要搜索“* AND city:california”(在本例中毫无用处,但可以作为示例),您可以使用原始查询和过滤器构建 DrillDownQuery,例如
Query baseQuery = new MatchAllDocsQuery();
DrillDownQuery ddQuery = new DrillDownQuery(config, baseQuery);
ddQuery.add("city", "california");
FacetsCollector fc = new FacetsCollector();
FacetsCollector.search(searcher, ddQuery, 10, fc);
Add 可以被多次调用。如果您为同一字段调用它,则值会附加 OR,如果您为不同字段调用它,则这些限制会附加 AND,例如(* AND(城市:加利福尼亚州或城市:约克)AND 年份:1980)
关于java - 获取针对特定字段 Lucene 的所有方面记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38163501/