3

私はこのような文書を持っています:
<doc>
<arr name="StartDate">
<date>2012-08-18T17:00:00Z</date>
<date>2012-06-28T17:00:00Z</date>
<date>2013-02-28T17:00:00Z</date>
<date>2012-04-16T17:00:00Z</date>
<date>2012-08-06T17:00:00Z</date>
<date>2012-05-18T17:00:00Z</date>
<date>2012-07-04T17:00:00Z</date>
</arr>
<arr name="EndDate">
<date>2012-09-29T17:00:00Z</date>
<date>2012-06-29T17:00:00Z</date>
<date>2013-04-16T17:00:00Z</date>
<date>2012-05-07T17:00:00Z</date>
<date>2012-08-15T17:00:00Z</date>
<date>2012-06-22T17:00:00Z</date>
<date>2012-08-01T17:00:00Z</date>
</arr>
</doc>

日付範囲があり、その範囲をカバーするStartDateとEndDateのペアを見つけたいです。たとえば、startDateとEndDateの最初のペア(2012-08-18 TO 2012-09-29)は、入力範囲(x、y)が2012-08-18<xおよび2012-09-29>yの場合にtrueを返します。

次のようなクエリを作成しました:
StartDate:[1995-12-31T23:59:59.999Z TO 2012-08-18T00:00:00.000Z] AND EndDate:[2012-09-29T00:00:00.000Z TO 2099-01 -01T00:00:00.000Z]
しかし、問題は、上記の14項目のセット内のすべての一致日をSOLRで検索することですが、それらを1つずつ比較したいだけです(1と1、2と2 ...)。

その方法を教えてください。どうもありがとう。

4

1 に答える 1

2

私は同様のモデルを持っていますが、私の知る限り、Solr でこれを行う方法はありません。

Solr には「フラットな」インデックスがあります。これは、基本エンティティが次のようになっている場合を意味します。

dates: [
  (start1, end1),
  (start2, end2),
  (start3, end3)
]

次のように平坦化されます。

start_date: [ start1, start2, start3 ]
end_date: [ end1, end2, end3 ]

そして、それぞれstartendペアの間に接続がないため、それらに対して範囲クエリを実行する方法はありません。これを Solr で直接機能させるには、おそらく、この接続を維持するカスタム Solr フィールド タイプを実装する必要があります。

もう 1 つの解決策は、日付フィールドとプライマリ エンティティのを備えた別のSolr コアを用意することです。idこれの欠点は、日付検索を主エンティティの他のフィールドでのフィルター処理と組み合わせることができないことです。

于 2012-04-19T08:15:08.857 に答える