2017-07-17 145 views
0

存在對用於嵌套查詢詞語過濾https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html和布爾術語濾波器https://www.elastic.co/guide/en/elasticsearch/reference/5.5/query-dsl-bool-query.htmlElasticsearch 5結合布爾術語和嵌套術語濾波器

嵌套是對象的陣列文檔。不只是對象。這是我不能使用簡單的布爾項過濾器。

我的查詢是這樣的:

{ 
    "query": { 
    "bool": { 
     "filter": [ 
     { 
      "term": { 
      "access_account.nid": 17, 
      "destroyed_at": null 
      } 
     } 
     ], 
     "must": { 
     "match_all": {} 
     } 
    }, 
    "nested": { 
     "path": "categories", 
     "query": { 
     "bool": { 
      "filter": [ 
      { 
       "terms": { 
       "categories.id": [ 
        15, 17 
       ] 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

過濾器是數組,因爲我在現實更多方面的過濾器。

我得到這個響應 reason": "[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]"

有沒有什麼解決如何父/嵌套項過濾器結合?官方文檔沒有幫助。

我的彈性版本是5.4

謝謝。

回答

2

就快,你nested查詢只需要去bool/filter子句中:

{ 
    "query": { 
    "bool": { 
     "filter": [ 
     { 
      "term": { 
      "access_account.nid": 17, 
      "destroyed_at": null 
      } 
     }, 
     { 
      "nested": { 
      "path": "categories", 
      "query": { 
       "bool": { 
       "filter": [ 
        { 
        "terms": { 
         "categories.id": [ 
         15, 
         17 
         ] 
        } 
        } 
       ] 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
+0

你是正確的,非常感謝你! :) – rado

+0

很高興幫助! – Val

+0

非常有幫助。起初Elasticsearch查詢模式看起來很混亂,但現在更清楚了。 – rado