2017-04-25 14 views
0

を無視することは、私はバーを開く方法についてのログを持って言うことができます:Solrには、倍の間で検索、日付

{ 
    opened:  '2013-11-05T00:00:00Z', 
    opened_start: '2013-11-05T12:00:00Z', 
    opened_end: '2013-11-05T14:00:00Z', 
}, 
{ 
    opened:  '2013-15-05T00:00:00Z', 
    opened_start: '2013-15-05T11:00:00Z', 
    opened_end: '2013-15-05T13:00:00Z', 
}, 
{ 
    opened:  '2013-11-05T00:00:00Z', 
    opened_start: '2013-11-05T18:00:00Z', 
    opened_end: '2013-11-05T19:00:00Z', 
}, 
{ 
    opened:  '2013-11-12T00:00:00Z', 
    opened_start: '2013-11-12T02:00:00Z', 
    opened_end: '2013-11-12T14:00:00Z', 
} 

は、今私は夜十二時00分00秒と6時00分00秒の間で開かれたバーを必要とします。私は、構造に関する影響を及ぼさないが、それは基本的に次のように構築します。

{ 
    opened:  'YMD000', 
    opened_start: 'YMD02:00:00Z', 
    opened_end: 'YMD14:00:00Z', 
} 

編集:私はsubstractingを考えていた:opened_start - ので、私は唯一の倍になるだろう開設:0000-00-00 2時00分00秒

答えて

0

これは昨日頼まれた:Solr, search only by time among datetime fields?

最善かつ最も簡単な事はちょうど別のフィールドを追加し、次のいずれかが動作する、簡単に照会可能であることを適切な形式であり、開口部の時間を追加することです。

    T13:00:3210
  1. は、同じようにすべての時間数を追加00Zを==> 130000
  2. は2013-11-01T00のような(Xインスタント以降の秒/分の番号を使用真夜中
  3. からの秒/分の番号を使用します:00:00Z)あなたは絶対的な基本時刻です

ここで、クライアント側を制御しない場合、solrの内側からフィールドを追加する必要があります。最も簡単なのはcopyFieldで行うことです上記のリンク)、またはUpdateRequestProcessor(それ以上の価値のない作業)を使用します。

1

バーの開口範囲は、XY空間の座標として表すことができます。開始時間はX、終了時間はYです。次に、範囲計算を使用して、Hoss's presentationのように重なりを探すことができます。

カスタムUpdateRequestProcessorチェーンを使用して日付を操作して、その形式に変換することができます。私はおそらく1時間だけを抽出する必要があると思う、それはあなたの細かさです。