[英]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.