如何根据lucene搜索结果查询lucene?

苹果

这是我要解决的问题:

  • 我有多个lucene索引,每个索引都包含相同数据结构的子集(它们具有相同的字段,但是某些索引中的字段可能会或可能不会出现在文档中)
  • 索引之间共享一个全局标识符。这意味着,如果有4个索引,则最多有4个文档共享一个密钥。
  • 我有一个Lucene查询

我使用a一起查询了所有索引,MultiReader并且能够找出匹配来自哪个子索引ReaderUtil到目前为止,一切都很好,但这是问题所在:

为了执行(相当复杂的)合并逻辑,我需要来自所有子索引的文档,这些文档的任何键都必须与原始查询中的至少一个文档匹配。

这是一个例子:

索引1

1: {key: "foo", name: "Name A", something: 42}

2: {key: "bar", something: 2}

索引2

27: {key: "foo", something: 2}

索引3

102: {key: "foo", name: "Name B"}

103: {key: "bar", something: 999}

现在,如果我要查询name "Name A",那么我只会从索引1获得文档1

我真正需要的是来自所有索引的所有文档,其中包含在该查询中被击中的键,而这些文档都是具有key的文档foo

  • 来自索引1的doc 1
  • 来自索引2的doc 27
  • 来自索引3的doc 102

基于对的原始查询name: "Name A"

我是否可以在没有2个单独查询的情况下实现此目标,第二个查询是OR基于第一个查询中检索到的密钥的大量查询有没有更有效的方法?

苹果

好的,这就是我的工作方式:

使用TermFirstPassGroupingCollectorwith组字段id,并使用实际的搜索查询(例如name: Name A执行搜索

TermFirstPassGroupingCollector firstPassCollector = new TermFirstPassGroupingCollector(
            "<grouping field name, e.g. id>",
            Sort.INDEXORDER,
            x);

searcher.search(query, firstPassCollector);

Collection<SearchGroup<String>> firstPassResult = firstPassCollector.getTopGroups(0, false)

然后,使用第二个通过收集器,并使用来收集所有组中的所有字段MatchAllDocsQuery

TermSecondPassGroupingCollector secondPassCollector = new TermSecondPassGroupingCollector(
            fieldNaming.getIdFieldName(),
            firstPassResult,
            Sort.INDEXORDER,
            Sort.INDEXORDER,
            maxDocsPerGroup,
            false,
            false,
            false);

searcher.search(new MatchAllDocsQuery(), secondPassCollector);

现在,我可以遍历我所有(匹配的)组,并获取每个组中的所有文档,无论是否显式匹配:

for (GroupDocs groupDocs : documentGroups) {

    if (groupDocs.totalHits == 0) {
        continue;
    }

    for (int doc : groupDocs.scoreDocs) {

        Document document = reader.document(doc);
        ...
    }
}

问题解决了。确保您处理古怪像第一遍收集getTopGroups()回来null

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Lucene搜索结果

来自分类Dev

如何撰写lucene.net的搜索查询?

来自分类Dev

如何提高Lucene中的搜索查询效率?

来自分类Dev

根据数字字段对Lucene中的搜索结果进行排序

来自分类Dev

如何减少休眠搜索(lucene)中的结果集?

来自分类Dev

如何使用Lucene查询界面在值列表中进行搜索

来自分类Dev

Cloudant / Lucene的模糊搜索没有结果

来自分类Dev

Lucene搜索多少个结果?

来自分类Dev

Lucene或使用布尔查询进行搜索

来自分类Dev

使用 Lucene 查询语法的 Azure 搜索返回不正确的结果

来自分类Dev

休眠搜索:Elasticsearch和Lucene产生不同的搜索结果

来自分类Dev

Lucene搜索词如何工作

来自分类Dev

Lucene搜索查询动态更新并添加其他查询字段?

来自分类Dev

如何从Lucene索引中获得独特的结果?

来自分类Dev

如何在lucene.net中索引和搜索带有特殊字符的短语查询?

来自分类Dev

Lucene数值范围查询未返回结果/意外结果

来自分类Dev

如何使Raven DB Lucene查询与结果转换器配合使用

来自分类Dev

Lucene查询语法-如何增加时间?

来自分类Dev

Lucene:没有停用词的搜索不会返回结果

来自分类Dev

Fuseki索引(Lucene)文本搜索没有返回结果

来自分类Dev

Lucene.net:使用MultiFieldQueryParser时没有搜索结果

来自分类Dev

Fuseki索引的(Lucene)文本搜索未返回任何结果

来自分类Dev

Hibernate + Lucene-Wildard搜索返回空结果

来自分类Dev

MongoDB全文搜索与Lucene?

来自分类Dev

Lucene搜索Alfresco

来自分类Dev

Lucene .NET搜索

来自分类Dev

MongoDB全文搜索与Lucene?

来自分类Dev

Lucene搜索语法

来自分类Dev

Alfresco Lucene搜索语法