这是我想解决的问题:
我使用MultiReader
一起查询所有索引,并且我能够使用ReaderUtil
找出命中来自哪个子索引。到目前为止还不错,但问题是:
为了执行一个(相当复杂的)合并逻辑,我需要来自所有子索引的文档,其中的任何键至少与原始查询中的一个文档匹配。
这里有一个例子:
指标1
1:{key:“foo”,name:“name A”,something:42}
2:{键:“bar”,某物:2}
索引2
27:{key:“foo”,something:2}
指标3
102:{key:"foo", name:"Name B"}
103:{key:“bar”,something:999}
现在,如果我要对name"Name A"
执行查询,则只能从索引1中获取文档1。
我实际上需要的是所有索引中的所有文档,这些文档都带有在该查询中被命中的键,这些文档都带有键foo
:
基于对名称的原始查询:“name A”
。
我能在没有两个单独查询的情况下实现这一点吗?第二个查询是基于第一个查询中检索到的密钥的大量或
?有没有更有效的方法?
好的,我是这样做的:
使用带有组字段id
的术语FirstPassGroupingCollector
,并使用实际搜索查询执行搜索(例如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);
...
}
}
问题解决了。确保你处理奇怪的事情,就像第一次通过收集器返回空代码一样。
我的任务是使用lucene在我们的产品表中搜索。我已经创建了一个索引,正在使用带有多个字段的QueryParser进行搜索,但结果不是我所需要的。我有一个存储为LM10的产品,但如果搜索词是LM 10,我希望能够找到它,但如果搜索词是Fred LM10或Fred LM 10,它也必须能够匹配。你知道我如何在Lucene做到这一点吗。 提前谢谢
问题内容: 我有一个查询,用于查找按位置排序的结果。结果还必须考虑增值税,因此这也在查询中。不幸的是,该查询在未缓存时可能需要4秒钟以上的时间才能运行。谁能发现任何明显的问题或建议我做些什么来改善它? 只是为了澄清查询中正在发生的事情: 计算的距离是使用经/纬度的欧几里得距离 当包含增值税时,incvat字段用于显示价格 WHEN / THEN语句用于将价格0置于最底端 查询: 问题答案: 您可以
首先,对不起我的英语不好! 我是Lucene图书馆的新人(从上周三开始),我试图了解如何根据找到的术语获得匹配文档的最佳相关性级别。 我使用Lucene 4.10。0(无Solr) 我能够索引/搜索英语/阿拉伯语文本,以及支持这些文本的点击突出显示。 现在我有一个问题与搜索结果的相关性。 如果我在三个文档中搜索“穆罕默德·奥马尔”: 我得到同样的分数为这3文档。 看起来Lucene忽略了单词顺序,
我试图用一个词作为查询来查找匹配项,但它似乎找不到。我正在使用标准分析仪,但找不到准确的结果。 我的索引文档是: 如果使用通配符查询: 它会返回内容:“敏捷的棕色狐狸跳过懒惰的狗” 如果使用术语查询: 它会返回内容:“敏捷的棕色狐狸跳过懒惰的狗” 现在,我想用“狐狸”作为我的新名词 但是我不知道哪个是正确的查询,或者如何做。我已经尝试了QueryParser、TermQuery和MultiPhra
我试图使用Lucene索引进行查询,但得到的结果为空,日志中出现以下错误, 我正在使用RDB DocumentStore,我已经检查了索引和节点是在节点表中创建的。 任何人都可以分享一些关于如何创建Lucene索引的示例代码吗?
我使用这个分析器创建了一个模型: 我实现了如下所示的查询。我得到了所有预期的结果,除了像“A.B.C”这样的结果。我做错了什么?我哪里误解了事情? 我的代码基于以下资源: