product_skusのインデックス内の特定のサプライヤの製品スキューを検索する販売インデックスに対して実行されている、特定のサプライヤIDのトップ100の販売者を生成する次のクエリがあります。これはうまくいく。弾性クエリフィルタチャレンジ
query = {
size: 0,
query: {
bool: {
filter: [
{
constant_score: {
filter: {
terms: {
sku: {
index: "product_skus",
type: "product",
id: supplier_id,
path: "skus"
}
}
}
}
}
],
must_not: []
}
},
aggs: {
unit_sum: {
terms: {
field: "sku",
size: 100,
order: {
one: "desc"
}
},
aggs: {
one: {
sum: {
field: "units"
}
}
}
}
}
}
ここで、特定のユーザーがサプライヤーskusのサブセットに限定してアクセスする必要があるシナリオがあります。私はこれに取り組む最善の方法の周りに頭を抱えようとしています。ユーザーがSkusにアクセスして2回目の検索を行うことができる別のインデックスを持つことに傾いていますが、クエリロジックを頭に浮かべることはできません。例えば、簡単に言えば
。上記の問合せでサプライヤ1の場合は、製品[A、B、C、D、E] を返し、ユーザーJohnは製品[A、C、E]に基づく結果のみを表示します。 これを行うためのクエリ? boolの内側のフィルタの後にshould節を追加するのと同じくらい簡単ですか?
ありがとうございます!
実際には、特定のユーザーがアクセス権を持っているSKUの数に依存します...少数の場合は、追加のSHOULD句を使用して逃げることができます。それが何百もの場合、別の解決策が必要になるでしょう。 –
はい、数千ではないにしても数百になるのが好きです。 – Raoot
ルーティングの使用について考えましたか? https://www.elastic.co/blog/customizing-your-document-routing – Adonis