2017-07-14 133 views
1

我有salesperson索引,其中availableDateRange作爲多值dateRangeField。 以下爲availableDateRangeSolr 6 DateRangeField搜索精確匹配

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

如果我搜索可用的銷售人員從2017年7月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]" 
] 

目前搜索DATERANGE [2017年7月15日於2017年7月17日]正顯示出我的銷售人員是誰,甚至提供一個匹配一天中的任何從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 TO 2017-12-31)

任何人都可以幫助我找出一個可行和有效的解決方案。

回答

1

您應該使用field查詢分析器用於指定函數(op)來處理範圍字段範圍字段(標準查詢分析器考慮DateRangeField爲下拉更換爲TrieDateField)。

它可被指定爲過濾器查詢fq={!field f=availableRange op=Contains}[2017-07-15 TO 2017-07-17](或使用_query_僞字段),其中op可以ContainsIntersectsWithin

默認行爲是Intersects,對於您的特殊情況Contains似乎適合。

+0

謝謝,似乎工作。 參考 https://cwiki.apache.org/confluence/display/solr/Working+with+Dates 有3個理性謂詞(即Intersects(默認),Contains,Within)。 欲瞭解更多知識,請告訴我如何使用其他2個理性謂詞(即相交(默認),內部) –