2017-08-24 28 views
0

我有一個文件結構如下:彈性搜索 - quering文件,其中兩個陣列的相交非空

{ 
    "documentId": 123, 
    "someOtherInfo": {...} 
    "permissions": ["a", "b, ..., "g"] 
} 

用戶本身具有權限集["x", "y", "z"]業務規則:當且僅當至少有一個用戶權限與文檔權限匹配時,才允許用戶A查看文檔X.或者把數學上,如果路口不爲空 -

["a", "b, ..., "g"] ∩ ["x", "y", "z"] ≠ ∅

我建立需要找到所有文檔的用戶訪問搜索引擎。我想將它存儲在Elastic Search中以提供所有優秀的查詢功能,但是如何使用ES DSL添加對權限的限制?非常感謝。

回答

1

您需要一個terms query其中可以傳遞其元素將被匹配的數組。這匹配包含任何提供的條款的文件。例如,以下內容將與包含權限= [「a」,「b」,「c」]但不是權限= [「a」,「t」,「c」]的文檔相匹配

{ 
    "query": { 
    "terms": { 
     "permissions": [ 
     "x", 
     "y", 
     "z", 
     "b" 
     ] 
    } 
    } 
}