gpt4 book ai didi

java - 索引正则表达式(最好在 Lucene 中)

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:59 33 4
gpt4 key购买 nike

有谁知道索引正则表达式的方法,以便我可以运行非正则表达式查询,与其中包含正则表达式字段的文档进行匹配?最好使用 Lucene 或其他进程内 Java 库。

背景

我正在从事一个项目,我们想要对大量用户交易进行分类。我们现在有工具可以做到这一点,但我们需要优化。

目前我正在探索 lucene 来替换使用 HashMaps、ConcurrentSkipListSets 实现父子关系构建的内存排序树。

a  -> category cat1
1 -> category cat2

b -> category cat4
\w*
6 -> category cat5

因此,字符串 'a 1''a 1 z x y' 将匹配 'cat2''a' 将匹配 'cat1''b x y 6' 将匹配 'cat5'。所有规则末尾都有一个隐式的 '.*',如果无需正则表达式匹配也可以进行匹配,则首选该规则。这些规则是根据属性列表构建的:

a        = cat1
a 1 = cat2
b = cat4
b \w* 6 = cat5

我们现在正在推送 50k 规则(并且还在增加),虽然这个过程的查找速度非常快,但它使用了太多 RAM,需要一些时间来构建,并且没有我们需要的那么灵活。

我已经尝试使用 Lucene 来索引这些规则,但是我遇到了麻烦,因为正则表达式匹配了很多常见单词(在我们的域中),并且为这些单词构建停用词并不容易,因为它们也经常变化。

所以重申一下 - 我需要一种方法来搜索正则表达式被索引的文档,并且查询根本不知道正则表达式。

有人吗?

--奥尔夫

最佳答案

Lucene 无法帮助您解决问题,如果您有 n 个正则表达式并且想要找到一个与您的输入匹配的正则表达式,那么没有比针对您的输入运行每个正则表达式更好的方法了。实际上有一个,即将所有正则表达式合并到一个有限状态机中,但这就是您当前正在做的事情。

但是,令我惊讶的是,您的进程使用了​​太多 RAM,而只有 50k 规则。你有多少内存?如果您同意分享您的实现细节,我相信还有改进的空间。

关于构建时间,您的应用程序如何工作?也许可以将数据结构的编译版本存储在磁盘上以缩短启动时间,然后仅通过增量更新对其进行修改。

关于java - 索引正则表达式(最好在 Lucene 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8974213/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com