1

私は SOLR を使用しており、営業担当者がクライアントを訪問できる日付の配列を保存しています (クライアントの要求に応じて、旅行は 1 日以上続く場合があります)。営業担当者ごとに、特定の月に営業担当者が利用できる日付のリストがあります。営業担当者データ、地理位置情報などを含む他のフィールドがあります。

私は範囲クエリに精通していますが、配列での SOLR 範囲検索は、私が望むものとは異なるように動作するようです - 配列内の任意の項目が一致する限り、範囲は一致します)。SOLR に範囲を含むクエリを送信し、その範囲内のすべての日付が配列内にある場合にのみ一致を返したいと思います。例えば:

<arr name="available_dates">
    <date>2012-04-30T00:00:00Z</date>
    <date>2012-05-01T00:00:00Z</date>
    <date>2012-05-02T00:00:00Z</date>
</arr>

-- should match --
available_dates:[2012-04-30T00:00:00.000Z TO 2012-05-02T00:00:00.000Z]

-- should not match as 2012-04-29 is not contained in available_dates --
available_dates:[2012-04-29T00:00:00.000Z TO 2012-05-02T00:00:00.000Z]

これは可能ですか、それとも私はこれについてすべて間違っていますか?

4

3 に答える 3

0

あなたは正しい考えを持っていますが、最初のクエリは一致ではなく検索です。直感的には、検索が正常に一致するためには、内の検索にavailable_dates:[2012-04-30T00:00:00.000Z TO 2012-05-02T00:00:00.000Z]のすべての要素が含まれている必要があります。available_dates

このロジックを効率的かつ正常に実装するには、2つのオプションがあります。配列内の各要素に対して手動または動的に範囲クエリを実行するか、検索の実行後に一致を実行しようとする補助を設定できます。例えば:

available_dates:[2012-04-30T00:00:00.000Z TO 2012-05-02T00:00:00.000Z](available_dates)

つまり、左から右の順序で、範囲検索を評価してから、からのすべての結果available_datesがこの評価に含まれていることを確認します(デフォルトのANDクエリを使用)。そうである場合は、要素を返します。そうでない場合は、しないでください。

構文的には、上記はテストされておらず、おそらく機能しません。ただし、手順としては、ニーズに合わせてこれに関する適切なクエリを作成できる必要があります。

複合検索クエリのデフォルトの動作について説明している追加のリソースAND

于 2012-04-09T01:00:20.923 に答える
0

範囲クエリを使用する代わりに、日付ごとに 1 つずつ、複数の句を使用する必要があります。

だから代わりにavailable_dates:[2012-04-29T00:00:00.000Z TO 2012-05-02T00:00:00.000Z]

使用する必要がありますavailable_dates:"2012-04-29T00:00:00.000Z" AND available_dates:"2012-04-30T00:00:00Z" AND available_dates:"2012-05-01T00:00:00.000Z" AND available_dates:"2012-05-02T00:00:00.000Z"

それがあなたの質問に答えることを願っています!

于 2012-04-07T09:39:58.647 に答える
0

このデータをデータベースからインポートしていると仮定します。

データベースまたは検索インデックスに、営業担当者の日付の最大値 (最新の日付など) と最小値を格納する新しい列を作成します。また、最大日付と最小日付の差を計算して保存します。

一致するクエリには 3 つの条件が一致する必要があります (クエリで AND を使用します)。

  1. クエリの最大値と最小値の差は、インデックスに格納されている差よりも大きくすることはできません

  2. {!frange l=0 u=difn_bet_query_max_and_min}sub(field_min,query_min) を確認します

  3. 最大値について同じことを定式化します

関数範囲の参照については http://www.lucidimagination.com/blog/2009/07/06/ranges-over-functions-in-solr-14/

于 2012-04-10T17:44:20.277 に答える