1

私たちのサイトでは、ユーザーがカテゴリに分けられた一連のフィルターを使用して、Elastic Search の結果をフィルター処理できるようにしています。

A
  A1
  A2
  ...
B
  B1
  B2
  B3
  ...

これらは、次のように、ドキュメントのフィールドに表示されるリテラル タグに一致するだけです。

{ tags: ["A1", "B1", "B2"] }

既存のクエリはすべてのフィルター条件を AND で結合しているため、ユーザーがA1B1、および を選択すると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))。

フィルタリング ロジックと集計カウントが一致するように、これを集計で表現する方法はありますか?

4

1 に答える 1