簡體   English   中英

Elasticsearch Bool查詢

[英]Elasticsearch Bool query

我想用2個字段Category和Brand_id過濾產品。

類別:

 Product.__elasticsearch__.search  query: { match:  { category: "Pulls & Gilets" } }

我總共有116

品牌編號:

Product.__elasticsearch__.search  query: { match:  { brand_id: "1" } }

我一共4

都:

Product.__elasticsearch__.search query: {
                  bool: {
                    must: {
                      term: { brand_id: "1" }
                    },
                    must: {
                      term: { category: "Pulls & Gilets" }
                      }
                    }
                  }

我應該總共有4個,而我卻有0個。我嘗試使用“過濾器”代替“必須”,但結果相同。 謝謝

當您將數據索引到Elasticsearch中時,它將使用標准分析器來拆分字符串,並以反向索引生成小寫標記-https: //www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer。 html 因此,對於文本“ Pulls&Gilets”,此分析器將生成三個標記(倒排索引中的“ pulls”,“&”和“ gilets”)。

匹配查詢是全文查詢,它在比較任何字符串之前使用字段分析器。

因此{match:{category:“ Pulls&Gilets”}}會生成三個小寫標記-“ pulls”,“&”和“ gilets”,它將獲取具有以下任意一個的所有文檔-“ pulls”,“&”和“背心”

因此,您將獲得更多具有以下任意一種類型的文檔-用於類別字段的“拉”,“&”和“背心”標記。

字詞查詢會與索引時生成的令牌直接進行比較。 但是在術語查詢中,您發送的是諸如{term:{category:“ Pulls&Gilets”}}的普通文本。 由於使用標准分析器對字符串進行了分析,因此不會為任何文檔生成像“ Pulls&Gilets”這樣的標記。 因此,您將獲得0個文檔。

理想情況下,您應以小寫形式發送所有令牌,例如-{terms:{category:[“ pulls”,“&”,“ Gilets”]}}

這將獲取所有類別的標記為“ pulls”,“&”或“ Gilets”的文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM