ElasticSearch正则表达式过滤器

无所事事

我在为ElasticSearch Regexp Filter正确表达正则表达式时遇到问题。我正在尝试匹配url字段中“ info-for / media”中的任何内容,例如http://mydomain.co.uk/info-for/media/press-release-1为了尝试正确使用我现在使用的正则表达式match_all,但这最终将match_phrase与用户的查询字符串一起使用。

POST到localhost:9200 / _search

{
"query" : {
               "match_all" : { },
               "filtered" : {
                           "filter" : {
                                   "regexp": {
                                        "url":".*info-for/media.*" 
                                    }
                          }
                }
         },
}

这将返回0次匹配,但可以正确解析。.*info.*确实会获得包含该URL的结果,但不幸的是,该结果太宽泛,例如,与包含“信息”的任何URL匹配。一旦在“ info-for”中添加连字符,我将再次获得0结果。无论我尝试使用哪种转义字符组合,我都会遇到解析异常,或者没有匹配项。有人可以帮我解释我做错了吗?

亚历克斯·布雷塞特维克(Alex Brasetvik)

首先,在可能的范围内,尽量不要使用没有前缀的正则表达式或通配符。搜索的方式.*foo.*是将索引字典中的每个单个词与模式进行匹配,该模式又被构建为匹配项的OR查询。您的语料库中唯一词的数量O(n),随后的搜索也非常昂贵。

本文对此有更多详细信息:https : //www.found.no/foundation/elasticsearch-from-the-bottom-up/

其次,您的url可能以使“ info-for”和“ media”在索引中分开的方式进行了标记。因此,info-for/media字典中没有用于匹配正则表达式的-term。

您可能想做的是使用path_hierarchy -tokenizer分别索引路径和域,以生成术语。

这是一个演示令牌生成方式的示例:https : //www.found.no/play/gist/ecf511d4102a806f350b#analysis

/foo/bar/baz生成令牌/foo/bar/baz, /foo/bar, /foo并将域令牌foo.example.com化为foo.example.com, example.com, com

在下面搜索任何内容/foo/bar都可以是简单的术语过滤器匹配path:/foo/bar那是性能更高的过滤器,也可以缓存。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

流过滤器正则表达式

Java正则表达式过滤器头

iMacros 的正则表达式过滤器

Ansible正则表达式过滤器

网址的正则表达式过滤器列表

Logstash Grok过滤器正则表达式

使用正则表达式或通配符过滤器按ID查询Elasticsearch

如何在 ElasticSearch 字段名称中使用正则表达式查询过滤器?

通过正则表达式过滤器过滤Google BigQuery列

使用正则表达式过滤器作为AWS CloudWatch Logs指标过滤器

Logstash过滤器(如果字段匹配正则表达式不起作用)

Kibana过滤器正则表达式“字符串开头”不起作用

带有正则表达式的Java Stream过滤器不起作用

输入过滤器-两个小数的正则表达式

正则表达式-使用(1)连字符或(2)句子结尾的过滤器

具有正则表达式过滤器的MongoDB Java驱动程序聚合

带有正则表达式过滤器的 awk 输出似乎跳过索引

在Scala中将正则表达式与过滤器一起使用

字符串过滤器忽略正则表达式

在Julia中的过滤器中使用正则表达式

熊猫-过滤器和正则表达式搜索DataFrame的索引

如何在熊猫过滤器函数中反转正则表达式

PHP递归正则表达式过滤器迭代器

TypeScript 过滤器数组匹配正则表达式

Jekyll过滤器替换内容中的正则表达式?

Knime列表文件节点正则表达式过滤器在\ +上损坏(加号)

正则表达式绝对开头:过滤器字母数字

gulp main-bower-files正则表达式过滤器不起作用

FindBugs过滤器:正则表达式不适用于Class元素