使用字段时:
<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 中多值
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"
]
}