3

範囲フィルターがアクティブな場合、それに応じて範囲ファセットが更新されるように取り組んでいます。フィルターが指定されていない場合、デフォルトの範囲とギャップを使用しています。フィルターが設定されている場合は、ファセット範囲のギャップを再計算するために 2 回目の solr 呼び出しを行います。

たとえば、最初に 10YEARS のギャップの範囲ファセットを示します。それらの 1 つをフィ​​ルタリングすると、1YEAR の 10 個の範囲ファセットが表示されます。再度フィルタリングすると、1 か月の範囲で 12 個のバケットが表示されます。

ある程度は機能しますが、範囲フィルターに * が含まれていると問題が発生します。Solr は、solrfield:[1960-01-01T00:00:00Z TO *] が指定されたときに結果を正しくフィルタリングする方法を知っていますが、* に基づいて日付範囲のファセット ギャップを再計算する方法がわかりません。現在、2 つの日付の差を UNIX タイムスタンプとして計算し、それに基づいて範囲のギャップを計算しています。

また、私がここでやろうとしていることの名前はありますか? 私はそれを「可変範囲ギャップ」と呼んでいますが、それが正しいかどうかはわかりません。

私がやっていることが最善のアプローチであるかどうかさえわかりません。どんなアドバイスでも大歓迎です。

編集:私の質問は次のとおりです:すべてのsolrクエリで、フィールドの最高日付と最低日付の差(UNIXタイムスタンプとして)を計算したいと思います。

編集 2: 私が実行するすべての solr 呼び出しには、(比較的小さなインデックスで) 約 300 ミリ秒かかります。クエリで最高と最低の日付値を見つけるために、日付の並べ替えを使用して 2 つの追加の呼び出しを行う場合、これはかなりのことです。次に、正しい日付ギャップ (および from/to 値) を使用して 4 番目の solr 呼び出しを実行すると、少し遅くなります。

4

1 に答える 1

0

おそらく、おなじみの「限られた日付範囲」のケースに変えることができます。データに将来の日付時刻を設定できない場合は、* を NOW に置き換えて、常に同じ結果セットを受け取り (日付が現在の時刻より後になることはあり得ないため)、現在のタイムスタンプに基づいてギャップを計算できます。

于 2012-09-27T11:39:39.703 に答える