2017-07-14 30 views
1

のインデックスはですが、これは多値のdateRangeFieldです。続き は、私は、検索結果では Solr 6 DateRangeField完全一致の検索

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

次のように2017年7月15日から207-07-17に利用できる販売員を検索する場合、私は2の結果を取得しています availableDateRangeフィールド

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

のスキーマです以下のように:現在

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日TO]私に1つのマッチング日のいずれでも利用可能である販売員を示しています15分から17分まで

現在のクエリは、私の質問がある

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

のように動作している:どのように私が言及した日付範囲15の(つまり、すべての日で検索範囲のすべての日に利用可能なすべての販売員を得ることができます、16,17は7月)

クエリは次のように振る舞うべき:

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

をしかし使用して現実的ではありませんソリューション、大きな日付範囲(例えば、 2017-01-01 TO 2017-12-31)

実現可能で効率的な解決策を見つけてください。

答えて

1

あなたは(標準クエリパーサがドロップインTrieDateFieldの代替としてDateRangeFieldを考える)範囲フィールドとして範囲フィールドに対処するための機能(op)を指定するためのfieldクエリパーサーを使用する必要があります。

opContainsIntersectsWithinできる場所それはフィルタクエリfq={!field f=availableRange op=Contains}[2017-07-15 TO 2017-07-17](又は_query_擬似フィールドを使用して)として指定することができます。

デフォルトの動作はIntersectsです。特定のケースの場合はContainsと思われます。

+0

ありがとうございます。 の参照としてhttps://cwiki.apache.org/confluence/display/solr/Working+with+Dates 3つの有理な述語(すなわち、交差(デフォルト)、包含、内部)があります。 他の2つの有理述語(すなわち、交差(デフォルト)、内部)をどのように使用すればよいか、 –

関連する問題