[英]Elasticsearch nested filter query
這是我正在嘗試創建查詢的json文檔的示例。 “params”字段被映射為“嵌套”。
{
"images": [
{
"name": "1907183375555f7c44126f23.67610475.png"
},
{
"name": "5693836375575c567764bc2.87695507.png"
}
],
"sku": "MYSKU",
"class": "some_class",
"params": [
{
"name": "item1",
"value": "item1value"
},
{
"name": "item2",
"value": "item2value"
},
{
"name": "item3",
"value": "item3value"
},
{
"name": "item4",
"value": "item4value"
},
{
"name": "item5",
"value": "item5value"
}
]
}
如何創建將在sku,類和嵌套參數上搜索的篩選查詢? 例如,在偽代碼中,我會在sku和類上有一個“bool”“must”,然后在構成文檔的每個參數上都有一個“嵌套”“過濾器”“bool”“必須”。 在https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-filter.html我可以看到如何使用嵌套在文檔上,其中每個嵌套字段都是唯一的字段名稱,但在我的文檔中,每個數組元素都有“name”和“value”。
看起來這應該很簡單。
這應該做(例如):
POST /test_index/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"term": {
"class": "some_class"
}
},
{
"term": {
"sku": "MYSKU1"
}
},
{
"nested": {
"path": "params",
"filter": {
"term": {
"params.name": "item1"
}
}
}
},
{
"nested": {
"path": "params",
"filter": {
"term": {
"params.name": "item3"
}
}
}
}
]
}
}
}
}
}
請注意,您希望匹配的每個嵌套文檔都有單獨的nested
過濾器子句(我只包含兩個,但您可以包含任意數量); 相反,如果我們使用了bool
單內nested
條款,帶着一幫的內內過濾器bool
,ES將設法找到符合所有提供的過濾器一個嵌套的文檔。 這樣我們告訴ES nested
過濾器不必全部應用於同一嵌套文檔。
這是我用來測試它的代碼:
http://sense.qbox.io/gist/26552d6a8a285c7715b0ac4feab08bd283971664
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.