私たちのサイトでは、ユーザーがカテゴリに分けられた一連のフィルターを使用して、Elastic Search の結果をフィルター処理できるようにしています。
A
A1
A2
...
B
B1
B2
B3
...
これらは、次のように、ドキュメントのフィールドに表示されるリテラル タグに一致するだけです。
{ tags: ["A1", "B1", "B2"] }
既存のクエリはすべてのフィルター条件を AND で結合しているため、ユーザーがA1
、B1
、および を選択するとB2
、 でフィルター処理され(A1 AND B1 AND B2)
ます。
これを「各フィルタ カテゴリ内の OR」と「カテゴリ全体の AND」に変更して、次のようにします(A1) AND (B1 OR B2)
。
さて、しわ: 「tags」フィールドで「terms」集計も使用して、次のフィルターの適用から返されるアイテムの数を予測します。UI では、次のようになります。
A
A1 12 # If the user adds the A1 filter, there'll be 12 results.
A2 3 # etc.
...
B
B1 5
B2 0
B3 2
...
ここで、フィルター ロジックを AND/OR に変更すると、用語の集計がまだ予測中であるため、「用語」の集計から返されるカウントが中断されますA1 AND B1 AND B2
。追加B3
するとA1 AND B1 AND B2 AND B3
、結果の範囲が実際に広がるのに対し、集計からのカウントが狭まるため、結果が得られます (必要です(A1) AND (B1 OR B2 OR B3)
)。
フィルタリング ロジックと集計カウントが一致するように、これを集計で表現する方法はありますか?