Elastic Search布尔字段高效查询咨询:如何获取is_sellable为true的文档
Elasticsearch布尔字段高效查询方案
要高效查询布尔字段is_sellable为true的文档,核心是利用不参与算分的过滤上下文,同时确保字段映射合理,具体建议如下:
1. 优先用filter + term查询(你当前的写法已经是最优方案之一)
你把term查询放在bool.filter中的做法本身就很高效:
filter上下文不计算文档相关性分数,能减少不必要的计算开销- Elasticsearch会自动缓存
filter的查询结果,后续相同查询可直接复用缓存,大幅提升响应速度
2. 确认字段映射为boolean类型
务必保证is_sellable字段在索引映射中是boolean类型,而非字符串或其他类型。如果是字符串类型,查询true时会做字符串匹配,不仅效率低,还可能出现大小写不匹配等错误。查看字段映射的命令:
GET /my-index-000001/_mapping/field/is_sellable
3. 针对你当前查询的额外优化点
结合你的查询结构,还有两个细节可以优化:
- 单个值的
terms查询换成term查询:比如Name和Year的terms数组里只有一个值,用term更简洁高效,避免不必要的数组处理 - 按需添加
minimum_should_match:如果业务要求should子句至少匹配一个,可以加上"minimum_should_match": 1(当前你的查询有filter,should默认是可选的,是否添加根据业务需求决定)
优化后的查询示例:
GET /my-index-000001/_search { "query": { "bool": { "filter": [ { "term": { "is_sellable": true } } ], "should": [ { "match": { "content": { "query": "tomas 48 coming home", "operator": "OR", "fuzziness": "AUTO", "prefix_length": 3, "max_expansions": 50, "fuzzy_transpositions": true, "lenient": false, "zero_terms_query": "NONE", "auto_generate_synonyms_phrase_query": true, "boost": 1 } } }, { "term": { "Name": "Tomas", "boost": 1 } }, { "term": { "Year": "2023", "boost": 1 } } ], "minimum_should_match": 1, "adjust_pure_negative": true, "boost": 1 } } }
内容的提问来源于stack exchange,提问作者userit1985
相关产品推荐
相关产品推荐

