gpt4 book ai didi

java - 为什么 lucene 单字符通配符查询找到的文档比完全指定通配符时少?

转载 作者:行者123 更新时间:2023-12-04 11:35:54 29 4
gpt4 key购买 nike

我有一个索引,其中包含分析器默认字段中的值 abcdef,并且属于两个不同的文档。当我执行查询 abc OR def 时,我得到了索引中两个文档的命中。但是当我使用 abc OR d?f 时,我只会命中包含 abc 的文档。当我使用 d?f 查询索引时,我找到了包含 def 的文档。

当我查看针对 abc OR d?f 的解析查询时,我看到了正确的结果。这意味着 BooleanQuery 被解析为具有 WildcardQuery 作为第二个子句。

我做错了什么吗?

在我的应用程序中,我在上面指定的子句之上还有另一个 boolean 子句。这与上面指定的字段不同。因此,在我的例子中,完整的查询将是:user:john AND (abc OR d?f)。但是我索引中的所有文档都在 user 字段中包含 john。所以这应该不是问题。

我正在使用 lucene 3.0.3。

编辑:
我使用 luke 查看了索引.我看到在重写的查询中,术语 d?f 被替换为 ()。知道很明显查询只会匹配abc。但为什么在重写查询时替换了通配符呢?

最佳答案

这只是我的错。测试场景中使用的数据有点复杂。所以术语 abc 在索引中出现了多次。但我只从索引中获取了 10 个得分最高的文档。由于查询在 d?f 之前匹配了 abc 且得分最高,因此这些结果排在第一位。因此查询未找到包含 def 的文档。

关于java - 为什么 lucene 单字符通配符查询找到的文档比完全指定通配符时少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13495243/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com