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