Java 根据特定字段Lucene获取所有方面的记录

Java 根据特定字段Lucene获取所有方面的记录,java,lucene,Java,Lucene,我是初学者,开始学习Lucene。目前,我已经在lucene 6.0.2中实现了一个CountFacets程序,它显示或输出所有Facets字段计数。但是现在,想搜索一个城市“加利福尼亚”,结果将显示所有方面的统计w.r.t这个查询,如何做到这一点 代码如下: public List<FacetResult> runSearch() throws IOException { DirectoryReader indexReader = DirectoryReader.open(

我是初学者,开始学习Lucene。目前,我已经在lucene 6.0.2中实现了一个CountFacets程序,它显示或输出所有Facets字段计数。但是现在,想搜索一个城市“加利福尼亚”,结果将显示所有方面的统计w.r.t这个查询,如何做到这一点

代码如下:

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;
}
public List runSearch()引发IOException{
DirectoryReader indexReader=DirectoryReader.open(indexDir);
IndexSearcher=新的IndexSearcher(indexReader);
TaxonomyReader taxoReader=新的目录TaxonomyReader(taxoDir);
FacetsConfig config=新的FacetsConfig();
FacetsCollector fc=新的FacetsCollector();
search(searcher,new MatchAllDocsQuery(),10,fc);
列表结果=新建ArrayList();
Facets Facets=新的FastTaxonomyFacetCounts(taxoReader,配置,fc);
结果:添加(facets.getTopChildren(10,“城市”);
结果:添加(facets.getTopChildren(10,“make”);
结果:添加(facets.getTopChildren(10岁));
结果:添加(facets.getTopChildren(10,“模型”);
indexReader.close();
taxoReader.close();
返回结果;
}

从您的示例中,我知道您已经在第一次搜索中搜索了*。要搜索“*和城市:加利福尼亚”(在本例中非常无用,但作为一个示例),您可以使用原始查询和过滤器构建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。如果您为同一字段调用该值,则会附加值;如果您为不同字段调用该值,则会附加和,例如(*和(城市:加利福尼亚或城市:约克)和年份:1980)