Solr 6 DateRangeField 搜索精确匹配

Solr 6 DateRangeField search exact match

我有 salesperson 索引,其中 availableDateRange 作为多值 dateRangeField。 以下是 availableDateRange 字段

的架构
<fields>
    <field name="availableDateRange" type="daterange" indexed="true" stored="true" multiValued="true" required="false"/>
</fields>
<types>
    <fieldtype name="daterange" class="solr.DateRangeField"/>
</types>

如果我搜索 2017-07-15 到 207-07-17 的可用销售人员如下

avalableRange:"[2017-07-15 TO 2017-07-17]"

在搜索结果中,我得到如下 2 个结果:

availableRange: [
    "[2017-01-01T00:00:00Z TO 2017-07-15T00:00:00Z]",
    "[2017-09-01T00:00:00Z TO 2017-12-31T00:00:00Z]"
]
availableRange: [
        "[2017-07-17T00:00:00Z TO 2017-07-19T00:00:00Z]"
]

当前搜索日期范围 [2017-07-15 TO 2017-07-17] 显示我的销售人员甚至在 7 月 15 日至 17 日的任何一个匹配日都有空。

当前查询的行为类似于

availableRange:"2017-07-15" OR availableRange:"2017-07-16" OR availableRange:"2017-07-17"

我的问题是:如何获取在搜索范围内所有日期(即上述日期范围 15、16、17 的所有日期)有空的所有销售人员七月)

查询的行为应类似于:

availableRange:"2017-07-15" AND availableRange:"2017-07-16" AND availableRange:"2017-07-17"

但是对于较大的日期范围(例如 2017-01-01 至 2017-12-31),使用 AND 并不是一个可行的解决方案

谁能帮我找出一个可行且有效的解决方案。

您应该使用 field 查询解析器指定函数 (op) 将范围字段作为范围字段处理(标准查询解析器将 DateRangeField 视为 TrieDateField).

可以指定为过滤查询fq={!field f=availableRange op=Contains}[2017-07-15 TO 2017-07-17](或使用_query_伪字段)其中op可以是ContainsIntersectsWithin

默认行为是 Intersects,对于您的特定情况 Contains 似乎适合。