2017-10-16 244 views
0

這是我的查詢。我試圖讓「men_fashion」和「men_shoes」類別內的所有產品(類別被用作術語/標籤)。然後,我想查詢整個結果集並搜索其中包含「男士靴子黃色」的產品。Elasticsearch聚合不適用於過濾器

下面的查詢工作得很好,但現在我沒有得到正確的聚合結果。它給了我所有的品牌,因爲我只對品牌感興趣。

{ 
    "size": 15, 
    "from": 0, 
    "query": { 
     "query_string": { 
      "query": "men boots yellow" 
     } 
    }, 
    "filter": { 
     "bool": { 
      "must": [{ 
       "match": { 
        "active": 1 
       } 
      }, { 
       "match": { 
        "category": "men_fashion" 
       } 
      }, { 
       "match": { 
        "category": "men_shoes" 
       } 
      }] 
     } 
    }, 
    "aggs": { 
     "brands": { 
      "terms": { 
       "size": 100, 
       "field": "brand" 
      } 
     } 
    } 
} 

我想這可能是因爲我已經應用了過濾器,但如果這是某種複雜的我行用一個簡單的查詢,將做到這一點沒有過濾器。

回答

1

您使用的是post filter,而不是一個正常的查詢過濾器,嘗試像這個:

{ 
    "size": 15, 
    "from": 0, 
    "query": { 
    "bool": { 
     "must": { 
     "query_string": { 
      "query": "men boots yellow" 
     } 
     }, 
     "filter": [ 
     { 
      "match": { 
      "active": 1 
      } 
     }, 
     { 
      "match": { 
      "category": "men_fashion" 
      } 
     }, 
     { 
      "match": { 
      "category": "men_shoes" 
      } 
     } 
     ] 
    } 
    }, 
    "aggs": { 
    "brands": { 
     "terms": { 
     "size": 100, 
     "field": "brand" 
     } 
    } 
    } 
} 
+0

我覺得你錯過了查詢參數。但那是完美的。感謝Val。我還有一個問題涉及彈性搜索,這個問題在過去一個月裏一直困擾着我。你可以在這裏找到我的問題 https://stackoverflow.com/questions/46463938/how-to-get-all-aggregations-by-avoiding-1-filter-from-the-elasticsearch-query。 基本上它是關於多選擇聚合。當我點擊任何過濾器,例如顏色:金色。它刪除所有其他聚合,並只顯示我那金黃色。但像亞馬遜這樣的網站有多種顏色可供選擇。有什麼比過濾聚合簡單 –

+0

Woopsie,我的壞,固定,謝謝! – Val

+0

經過一些測試後,我意識到查詢有問題。我無法搜索大部分詞組。我如何修改這個,所以任何有點相關的應該顯示 –