gpt4 book ai didi

search - 这个 Solr 范围过滤器查询有什么问题?

转载 作者:行者123 更新时间:2023-12-04 15:23:45 25 4
gpt4 key购买 nike

以下过滤器查询返回零个结果(使用 *:* 作为查询):

-startDate:[* TO *] OR startDate:[* TO NOW/DAY+1DAY]

但如果我只过滤:
-startDate:[* TO *]

我得到 3 个结果。

如果我只过滤:
startDate:[* TO NOW/DAY+1DAY]

我得到 161 个结果。

为什么组合的 FQ 返回零结果?我想要的是过滤器返回任何开始日期为空或开始日期在今天之前的文档。

编辑:

我正在使用 Solr 4.2.1.2013.03.26.08.26.55

编辑:

好吧,听起来很奇怪,一位同事建议在这两个部分上加上括号,如下所示:
(-startDate:[* TO *]) OR (startDate:[* TO NOW/DAY+1DAY])

不知何故,它奏效了。我仍然很好奇为什么这会有所不同。希望有人能有所启发。

谢谢!

最佳答案

Solr 支持纯否定查询。他们这样做,本质上是通过将纯否定扩展为以下内容:

*:* -startDate:[* TO *]

但是,您将它组合在 BooleanQuery 中的内容,我认为它不再适用于这种逻辑。在 lucene 中,否定查询不会获取任何内容,而是过滤掉由其他肯定查询词带来的匹配项。这与 SQL 查询不同,SQL 查询在某种意义上以隐式 *:* 开头。 ,或完整的结果表,并允许您将其缩减。

我相信你的 OR实际上被忽略了,因为严格来说,它在上下文中没有意义。一般情况下, OR只是语法糖,我相信( field:this OR field:that 相当于 field:this field:that )。

因此,实际上您的查询是: startDate:[* TO NOW/DAY+1DAY] -startDate:[* TO *] ,这使您看到的结果更加明显。当您将其括在括号中时,每个术语查询将被单独处理,您可以访问 solr支持孤独的否定查询。

如果您需要搜索未设置/空值,则更好的想法是存储默认值。 *:*并且通过扩展,像这样的纯否定查询必须扫描整个索引,因此性能非常差。提供默认值将提高性能,并防止这种困惑的情况。

关于search - 这个 Solr 范围过滤器查询有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17221736/

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