繁体   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