我有以下查詢,針對給定的供應商ID生成排名前100的賣家,針對在product_skus的索引中查找給定供應商的產品skus的銷售指數運行。這很好。彈性查詢篩選器挑戰
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的另一個索引,但我無法完全理解查詢邏輯。
舉個簡單的例子,如果在上面的查詢中,對於供應商1,我們返回產品[A,B,C,D,E] ,並且用戶約翰應該只看到基於產品的結果[A,C,E] 如何去寫查詢做到這一點?是否像在bool中的過濾器之後添加should子句一樣簡單?
在此先感謝!
這真的要取決於給定用戶有權訪問的SKU的數量......如果它是一個小數字,我認爲您可以使用額外的SHOULD子句逃脫。如果數以百計,那麼你可能會需要另一種解決方案。 –
是的,它就像成百上千,甚至數千。 – Raoot
你有沒有想過使用路由? https://www.elastic.co/blog/customizing-your-document-routing – Adonis