当前位置: 首页 > 面试题库 >

ElasticSearch正则表达式过滤器

朱经武
2023-03-14
问题内容

我在为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结果。无论我尝试使用哪种转义字符组合,我都会遇到解析异常或没有匹配项。有人可以帮我解释我做错了吗?


问题答案:

首先,尽可能尝试不要使用没有前缀的正则表达式或通配符。搜索的方式.*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。那是性能更高的筛选器,也可以缓存。



 类似资料:
  • 我在正确表达ElasticSearch regexp过滤器的regexp时遇到了问题。我正在尝试匹配url字段中“info-for/media”中的任何内容,例如http://mydomain.co.uk/info-for/media/press-release-1。为了尝试获得正确的正则表达式,我现在使用,但最终将是带有用户查询字符串的。 发布到localhost:9200/_search 这返

  • 问题内容: 我的代码如下所示: 它返回一个列表,其中仅包含与匹配的条目。我想知道是否有一个内置的功能,类似于: 问题答案: 除了Konstantin的回答:Java 8 通过对该类添加了支持,该类在内部调用: 太棒了!

  • 问题内容: 我想在Java中构建一个正则表达式,该正则表达式将在FilenameFilter中传递以过滤目录中的文件。 问题是我无法理解正则表达式“思维模型”的问题:) 这是我用来选择要排除的文件的正则表达式 (((ABC | XYZ))+ \ w * Test.xml 我想做的是选择所有以Test.xml结尾但不以ABC或XYZ开头的文件。 您能否添加任何可以帮助我应对正则表达式的资源。 谢谢

  • 问题内容: 我正在尝试过滤包含一堆URL的数组。我需要返回仅包含“联系人”一词的网址。 例如,有一个链接 这应该从过滤器中返回。 我尝试了这个: 当我知道有一个包含“联系人”一词的域时,它目前仅通过所有域发送回false。 问题答案: 首先,它等于哪里是退格字符(ASCII 08)…显然不是您想要的 所以,你会做的-这相当于 但是,之后是多余的 所以…到 在这里使用被滥用。以下是说明 下一个问题是

  • 本文向大家介绍MYSQL使用正则表达式过滤数据,包括了MYSQL使用正则表达式过滤数据的使用技巧和注意事项,需要的朋友参考一下 一、正则与LIKE的区别  Mysql的正则表达式仅仅使SQL语言的一个子集,可以匹配基本的字符、字符串。 例如:select * from wp_posts where post_name REGEXP'hello',可以检索出列post_name中所有包含hello的

  • 过滤表达式 mitmproxy工具中的许多命令都使用过滤器表达式。过滤器表达式由以下运算符组成: 命令 描述 〜a 匹配响应资源:CSS,Javascript,Flash,images。 〜b regex Body 〜bq regex 请求的Body 〜bs regex 响应的Body 〜c int HTTP响应码 〜d regex 域名 〜dst regex 匹配目标地址 〜e 匹配错误 〜h