- 优先级:
- 在ElasticSearch中,当同时使用查询字符串和请求正文进行数据检索时,请求正文的优先级高于查询字符串。也就是说,如果在查询字符串和请求正文中都设置了相同的查询条件,请求正文中的设置会生效。
- 优化复杂查询场景举例:
- 场景描述:假设我们有一个电商产品索引,需要查询价格在100到200之间且品牌为“Apple”的产品。同时,我们希望可以通过查询字符串进行一些简单的过滤,比如只显示库存大于10的产品。
- 示例代码:
POST /products/_search
{
"query": {
"bool": {
"must": [
{
"range": {
"price": {
"gte": 100,
"lte": 200
}
}
},
{
"match": {
"brand": "Apple"
}
}
]
}
}
}?q=stock:>10
- 解释:在上述示例中,请求正文里使用
bool
查询组合了价格范围查询和品牌匹配查询,这部分是复杂查询的核心。而通过查询字符串q=stock:>10
,可以在不修改请求正文复杂查询逻辑的情况下,快速添加库存大于10的简单过滤条件。由于请求正文优先级高,其复杂查询逻辑会先被执行,之后再应用查询字符串中的简单过滤条件,从而实现了复杂查询场景下的优化。