gpt4 book ai didi

java - Lucene 查询解析行为 - 使用 AND 连接查询部分

转载 作者:搜寻专家 更新时间:2023-11-01 03:55:51 24 4
gpt4 key购买 nike

假设我们有一个 Lucene 索引,其中很少有使用 StopAnalyzer.ENGLISH_STOP_WORDS_SET 编制索引的文档。用户正在发出两个查询:

  • foo:bar
  • baz:"有"

我们假设第一个查询产生了一些结果,因为有与该查询匹配的文档。

第二个查询产生 0 个结果。这样做的原因是因为当 baz:"there is" 被解析时,它最终作为一个无效查询结束,因为 thereis 都是停用词(从技术上讲,这被转换为没有子句的空 BooleanQuery)。到目前为止一切顺利。

但是,以下任何组合查询

  • +foo:bar +baz:"有"
  • foo:bar AND baz:"有"

与查询 +foo:bar 的行为完全相同,即返回一些结果 - 尽管第二个 AND 部分没有产生任何结果。

有人可能会争辩说,当进行 AND 操作时,必须满足两个条件,但事实并非如此。

这似乎是矛盾的,因为原子查询组件根据上下文对整体查询有不同的影响。对此有什么合乎逻辑的解释吗?能否以任何方式解决这个问题,最好不要编写自己的 QueryAnalyzer?这可以归类为 Lucene 错误吗?

如果这有什么不同,观察到的行为发生在 Lucene v3.0.2 下。

这个问题也发布在 Lucene Java users mailing list 上, 到目前为止还没有答案。

最佳答案

如果您希望能够搜索像“there is”这样的短语,我建议您不要使用 StopAnalyzer。 StopAnalyzer 本质上是一种有损优化方法,除非您要索引大量文本文档,否则它可能不值得。

关于java - Lucene 查询解析行为 - 使用 AND 连接查询部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6044061/

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