Elasticsearch 6.8.13如何实现类似Oracle的like与or组合模糊查询
Elasticsearch 6.8.13 类like查询实现方案
你需要实现的like 'a%'属于前缀匹配场景,对应Oracle语句可以通过ES的bool查询组合prefix查询实现,具体DSL如下:
GET /替换为你的实际索引名/_search { "query": { "bool": { "should": [ { "prefix": { "field_name1": "a" } }, { "prefix": { "field_name2": "a" } } ], "minimum_should_match": 1 } } }
各部分逻辑说明:
should数组下的多个查询条件为OR关系,只要满足其中一个即可命中,对应原SQL中的or逻辑prefix查询为ES内置的前缀匹配查询,功能完全等价于SQL中的like '前缀%'minimum_should_match: 1明确要求至少满足一个should条件,避免无匹配条件的记录被误返回
注意:如果你的
field_name1、field_name2是设置了分词的text类型,prefix查询默认匹配分词后的词项前缀。如果你需要匹配字段完整原始值的前缀,请使用字段对应的keyword子字段查询,示例如下:
GET /替换为你的实际索引名/_search { "query": { "bool": { "should": [ { "prefix": { "field_name1.keyword": "a" } }, { "prefix": { "field_name2.keyword": "a" } } ], "minimum_should_match": 1 } } }
如果后续需要实现%a%、%a这类更灵活的模糊匹配,可以替换为wildcard查询,不过前缀匹配场景下prefix查询性能更高,优先推荐使用。
内容的提问来源于stack exchange,提问作者E. Smailov
相关产品推荐
相关产品推荐

