如何在Elasticsearch中无需添加转义符\即可查询[]{}等特殊字符
Elasticsearch特殊字符免转义查询方案
核心结论
可以无需手动给[]、{}这类特殊字符追加\转义符完成查询,有两种成熟实现方案:
方案1:替换为无语法解析的查询类型
你当前使用的query_string属于语法敏感查询,会默认把{}、[]等字符识别为查询保留语法,所以默认要求转义。如果不需要用到query_string的复杂语法能力,直接替换为wildcard查询即可,这类查询不会对特殊字符做语法解析,无需转义:
{ "track_total_hits": true, "query": { "bool": { "must": [ { "wildcard": { "GECORRIGEERDETOEVOEGING.formatted": { "value": "*{uer}*" } } } ] } }, "_source": [ "GECORRIGEERDETOEVOEGING" ], "size": 30, "from": 0, "sort": [ { "ORDERNUMMER.keyword": { "order": "asc" } } ] }
方案2:保留query_string,开启自动转义参数
如果必须使用query_string的相关能力,只需新增escape: true参数,Elasticsearch会自动对查询内容中的所有保留特殊字符做转义处理,无需手动添加转义符:
{ "track_total_hits": true, "query": { "bool": { "must": [ { "query_string": { "default_field": "GECORRIGEERDETOEVOEGING.formatted", "query": "*{uer}*", "analyze_wildcard": "true", "default_operator": "AND", "escape": true } } ] } }, "_source": [ "GECORRIGEERDETOEVOEGING" ], "size": 30, "from": 0, "sort": [ { "ORDERNUMMER.keyword": { "order": "asc" } } ] }
注意事项
- 若查询字段为text类型,需确保字段使用的分词器不会过滤
{}、[]这类符号,否则会出现匹配失效问题 - 通配符查询开头使用
*会触发全字段扫描,数据量大时性能较低,高并发场景建议提前用ngarm分词做字段预处理优化查询效率
内容的提问来源于stack exchange,提问作者madhavi
相关产品推荐
相关产品推荐

