根据特定字段Lucene

时间:2016-07-02 18:56:04

标签: java lucene

我是初学者并开始学习Lucene。目前我在lucene 6.0.2中实现了一个Count Facets程序,它显示或输出所有facet字段数。但现在,想要寻找一个城市"加州"并且在结果中它将显示所有方面计算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;
}

1 个答案:

答案 0 :(得分:1)

从你的例子中我得到你在第一次搜索中搜索过的*。要搜索“* 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);

可以多次调用添加。如果您为同一字段调用该值,则该值将附加OR,如果您为其他字段调用该值,则会将这些限制附加到AND,例如(* AND(城市:加州或城市:约克)和年份:1980年)