java - 获取针对特定字段 Lucene 的所有方面记录

标签 java lucene

我是初学者,开始学习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/

相关文章:

java - 在 eclipse 中开发 Lotus Notes Plugin 时对 Notes.jar 的访问限制

java - 使用数组存储多个用户生成的整数

java方法.invoke() : how to check if valid jar is specified?

java - 为什么我的 GregorianCalendar 对象返回错误的星期几?

java - 在 Java 中找不到主类?

java - lucene 查询最高分 x% 以内的结果

indexing - 获取一个 Neo4j 索引的所有键

java - 如何测试 Lucene 分析器?

java - 使用 lucene 重新索引对象

java - 我的 java 进程的文件描述符变为 "bad",我不知道为什么