SOLR:按多值 pdate 字段匹配标准中的值数量进行过滤

问题描述 投票:0回答:1

使用字段时:

<field name="importantDays" type="pdate" indexed="true" stored="true" multiValued="true" docValues="true"/>

我想使用标准日期范围过滤器语法 [2024-8-10 至 2024-8-24] 并根据同一文档中所需时间范围内存储的日期数量来过滤文档。例如,

Doc A: importantDays:[2024-08-10T00:00:00Z, 2024-08-11T00:00:00Z, 2024-08-12T00:00:00Z, 2024-08-13T00:00:00Z, 2024-08-29T00:00:00Z]

Doc B: importantDays:[2024-08-10T00:00:00Z, 2024-08-11T00:00:00Z, 2024-08-29T00:00:00Z]

我只对 [2024-8-10 至 2024-8-14] 范围内存储有 3 个或更多日期的文档感兴趣。

Doc A
通过了这个标准,
Doc B
则没有。是否可以使用 solr 创建这样的过滤查询?结果集的分面是强制性的。

我在这里找到了 13 年前试图解决此问题的问答:Solr:过滤 OR 查询中与多值字段的匹配数

它使用

sum
frange
termfreq
。我认为使用
frange
termfreq
的相应搜索查询将是:

"fq":[
 "importantDays:["2024-08-10T00:00:00Z" TO "2024-08-14T00:00:00Z"]",

 "{!frange l=3}sum(
       termfreq(importantDays,"2024-08-10T00:00:00Z"),
       termfreq(importantDays,"2024-08-11T00:00:00Z"),
       termfreq(importantDays,"2024-08-12T00:00:00Z"),
       termfreq(importantDays,"2024-08-13T00:00:00Z")
     )"
]

此过滤器查询返回零结果。使用

termfreq
值时,
pdate
似乎未按预期工作。关于如何执行上述查询有什么想法吗?

solr
1个回答
0
投票

要按 Solr 中多值

pdate
字段的范围内匹配日期的数量来过滤文档,请结合使用范围过滤和分面。

<field name="importantDays" type="pdate" indexed="true" stored="true" multiValued="true" docValues="true" />
{
  "fq": [
    "importantDays:[2024-08-10T00:00:00Z TO 2024-08-14T00:00:00Z]"
  ],
  "facet": {
    "importantDays_count": {
      "type": "query",
      "q": "importantDays:[2024-08-10T00:00:00Z TO 2024-08-14T00:00:00Z]"
    }
  },
  "fq": [
    "{!frange l=3}importantDays_count"
  ]
}
© www.soinside.com 2019 - 2024. All rights reserved.