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
可以是Contains
、Intersects
、Within
。
默认行为是 Intersects
,对于您的特定情况 Contains
似乎适合。
我有 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
可以是Contains
、Intersects
、Within
。
默认行为是 Intersects
,对于您的特定情况 Contains
似乎适合。