如何配置Elasticsearch DSL查询中的regexp查询部分?
配置Elasticsearch DSL中的regexp查询匹配含"swagger"的数据
嘿,我来帮你搞定这个regexp查询的配置~既然你已经能正常运行不含regexp的查询,那只需要在DSL里添加regexp查询块就可以了,下面给你具体的例子和说明:
基础版:仅用regexp匹配message字段含"swagger"的数据
如果你的需求就是单纯筛选message字段中包含"swagger"的文档,直接用下面的DSL提交即可:
POST myAddress/_search { "query": { "regexp": { "message": { "value": ".*swagger.*", "flags": "ALL" } } } }
value:.*swagger.*是正则表达式,.*表示匹配任意数量的任意字符(包括0个),所以整个表达式能匹配任何包含"swagger"子串的内容。flags: 设置为ALL会启用所有正则表达式标志,比如如果需要不区分大小写匹配(比如匹配"Swagger"、"SWAGGER"等),可以单独指定CASE_INSENSITIVE,或者直接把value写成.*[Ss][Ww][Aa][Gg][Gg][Ee][Rr].*,不过用flag更简洁。
进阶版:结合原有查询条件
如果你之前的查询还有其他筛选条件(比如match、term等),可以把regexp放到bool查询的must数组里,和原有条件组合:
POST myAddress/_search { "query": { "bool": { "must": [ // 这里放你之前正常运行的查询条件,比如: { "match": { "service_name": "api_gateway" } }, // 新增的regexp匹配条件 { "regexp": { "message": ".*swagger.*" } } ] } } }
小提示
- 如果只是简单的"包含某个字符串"需求,其实用
match_phrase或者wildcard查询性能会比regexp更好,比如"wildcard": {"message": "*swagger*"},但如果确实需要正则的灵活匹配(比如匹配特定格式的swagger相关内容),regexp就是合适的选择。 - 尽量避免写过于宽泛的正则(比如
.*开头结尾),如果能缩小匹配范围(比如知道swagger前后的字符特征),可以优化正则表达式来提升查询性能。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

