2017-02-13 140 views
0

我正在使用elasticsearch 1.5.2。我存儲了一些名爲「過敏」字段的產品,還有一些沒有此字段的產品。這個領域的價值可以是魚或牛奶或堅果等。我想做一個查詢,並得到結果只有產品沒有在所有這個領域稱爲「過敏」,並將其整合到另一個聚合查詢。我只想做一個查詢:首先消除具有「過敏」字段的產品,然後執行第二個塊的聚合查詢。Elasticsearch篩選器查詢

如何整合這一點:

{ 
    "constant_score" : { 
     "filter" : { 
      "missing" : { "field" : "allergic" } 
     } 
    } 
} 

到這個集合的查詢:

POST tes1/_search?search_type=count 
{ 
    "aggs" : { 
     "fruits" : { 
      "filter" : { 
       "query":{ 
       "query_string": { 
        "query": "Fruits", 
        "fields": [ 
         "category" 
        ] 
       } 
      }}, 
      "aggs" : { 
       "minprice": { 
        "top_hits": { 
         "sort": [ 
          { 
           "prix en €/kg": { 
            "order": "asc" 
           } 
          } 
         ], "size":400 
        } 
       } 
      } 
    }} } 

回答

0

你需要聚集調用之前添加的查詢部分。這將過濾結果,然後在結果集上運行聚合。

POST tes1/_search 
{ 
    "_source": false, 
    "size": 1000, 
     "query": 
      { "constant_score" : { 
        "filter" : { 
         "missing" : { "field" : "allergic" } 
        } 
       } 
      }, 
    "aggs" : { 
     "fruits" : { 
      "filter" : { 
       "query":{ 
       "query_string": { 
        "query": "Fruits", 
        "fields": [ 
         "category" 
        ] 
       } 
      }}, 
      "aggs" : { 
       "minprice": { 
        "top_hits": { 
         "sort": [ 
          { 
           "prix en €/kg": { 
            "order": "asc" 
           } 
          } 
         ], "size":400 
        } 
       } 
      } 
    }} } 

在附註中,請考慮將ElasticSearch升級到最新版本,因爲1.x不再受支持。

+0

你能否在其他時間閱讀這個問題?我編輯它來添加打印的查詢。謝謝。 –

+0

順便說一句,我把試過這樣: POST TEST1/_search { 「constant_score」:{ 「過濾器」:{ 「失蹤」:{ 「場」: 「過敏」} } } } 和我有一個錯誤 –

+0

修改我的答案。請嘗試執行上述查詢。 – NutcaseDeveloper