如何在Elasticsearch中有效地搜索动态定义的正则表达式?

问题描述 投票:1回答:1

我正在文件系统项目(如Dropbox)中工作。对于文件系统,我有一个索引数据用于弹性搜索中的全文搜索。我有很多大文件,搜索效果很好。但是现在我的要求是使用此数据查询一些正则表达式。我们有一个用于客户的管理面板,正则表达式将由客户在管理面板中动态定义。

我知道我可以在弹性搜索中进行正则表达式搜索,但是这里的问题是令牌生成器。例如,假设用户想要创建一个正则表达式模式,并且想要搜索3个字母(“-”和2个数字,例如“ ABC-12”或“ ASD-34”)。这里的问题是我的标记器。定义的标记生成器省略字符“-”,并分别索引“ ABC”和“ 12”。您可以说不是省略“-”字符。但是用户可能希望搜索一个包含3个字母,空格和2位数字的模式,以检索数据“ ABC 12”。这里的空白是问题。我必须以某种方式使用标记器,并且不能涵盖所有动态正则表达式。因此,在索引中搜索并不能解决我的问题。

实际上,对于这种类型的搜索,我还有另一个选择是查询所有匹配项的所有数据。使用搜索滚动API,我可以部分查询所有原始文档。在滚动API的每个响应之后,我可以在单独的线程中运行我的regex查找器。这样我就可以在滚动操作后准备所需的数据。您是否认为此选项适用于大数据?我认为我将需要良好的CPU能力和RAM。我知道这不是一个特殊的解决方案,但是我找不到满足我要求的任何有效解决方案。我愿意寻求更好的解决方案。谢谢。

regex elasticsearch full-text-search full-text-indexing
1个回答
0
投票

我相信,ES允许您分析相同的字段multiple times。文档指出,以后可以将新的分析仪添加到现有字段:

可以使用PUT mapping API将新的多字段添加到现有字段中。

这为您发现用户使用哪种正则表达式提供了动态添加新分析器(以及此问题的tokenisers的可能性。我不确定对于您的特定用例而言,它会是多么琐碎,但这似乎是探索的途径

© www.soinside.com 2019 - 2024. All rights reserved.