我在正确表达ElasticSearch正则表达式筛选器的正则表达式时出现问题。我试图在网址字段中的“info-for/media”中匹配任何内容,例如http://mydomain.co.uk/info-for/media/press-release-1。要尝试获得正确的正则表达式,我现在使用的是match_all
,但最终将使用用户的查询字符串match_phrase
。ElasticSearch正则表达式筛选器
POST为localhost:9200/_search
{
"query" : {
"match_all" : { },
"filtered" : {
"filter" : {
"regexp": {
"url":".*info-for/media.*"
}
}
}
},
}
这将返回0命中,但正确地解析。 .*info.*
确实会得到包含该网址的结果,但不幸的是该网址过于宽泛,例如匹配包含“信息”的任何网址。只要我在“info-for”中添加连字符,我就会再次得到0个结果。无论我尝试使用哪种转义字符组合,我都会得到解析异常,或者无法匹配。任何人都可以帮助解释我做错了什么?
一个更简单的选项是将此字段映射为未分析版本的多字段,并在未分析字段上运行regexp过滤器。一般来说,正则表达式过滤器在非分析字段上更有意义。 –
这仍然是一个非常昂贵的查询来执行。 –
谢谢@AlexBrasetvik我在将映射/分析器配置的JSON版本发布到我的索引_settings端点时遇到了一些困难。它无法找到我声明的分析器。如果你有它,示例JSON会非常有帮助,谢谢。 – idlemind