Solr 查询包含特定字段没有索引值的文档

时间:2021-02-19 18:06:32

标签: solr

我正在将我们的系统从 Solr 4.1.0 更新到 Solr 8.1.4。 (是的,我知道这不是可用的最新版本,但这是我们系统批准的版本)。

我们会定期提交查询以查找“重叠”时间范围的文档。假设我们有索引字段 "starttime_date""endtime_date"。以防万一,这些字段在 Solr 4.1.0 中被索引为 TrieDateField 类型,而在 Solr 8.1.4 中这些字段是 DatePointField 类型。

这些“查找重叠文档”查询的一部分是包括任何还没有 endtime_date 值的文档。因此,查询将如下所示:

(starttime_date:[* TO 2021-02-19T17:00:00.000Z] AND (endtime_date:[2021-02-19T15:00:00.000Z] OR (*:* NOT endtime_date:*)))

这应该找到在 02/19/2021 17:00Z 之前开始的所有文档,并且没有结束,或者在 02/19/2021 15:00Z 之前结束。我把它用括号括起来,因为这组子句几乎总是与其他子句“与”。对于这个问题,其他条款不是我关心的。

此解决方案是基于对类似问题的回答而构建的:https://stackoverflow.com/a/28859224/3586783

此解决方案适用于 Solr 4.1.0,但似乎不适用于 Solr 8.1.4。一旦我添加了 OR (*:* NOT endtime_date:*) 子句,它似乎匹配所有文档。我曾尝试使用 -endtime_date:*-endtime_date:[* TO *]!endtime_date:*!endtime_date:[* TO *],但这些都没有奏效。

这是否与字段类型(TrieDateField 到 DatePointField)的变化有关?我们的查询语法没有改变,但现在 Solr 处理查询的方式似乎有所不同。

如果需要更多信息来理解问题,请告诉我。

0 个答案:

没有答案