我正在寻找一种方法来对一百万个1千字节的字符串进行快速全文搜索。
加速这类事情的流行方法(Lucene,或MongoDB中的文本索引)在搜索时的高性能似乎来自于在索引构建时将内容字符串拆分成标记。这些标记基于自然语言单词。但是,我希望避免这种标记化,因为我希望搜索与自然语言单词无关的字符串。
我正在寻找一些功能类似的SQL“喜欢'%abc%'",但不仅仅是"abc”。例如,对于诸如"a.1“之类的字符串,并使其与诸如”..........a.123.......“之类的文档匹配。
我得到的印象是,从理论上讲,使用suffix trees是可能的,但我还没有找到合适的Java实现。我所说的“适当”是指不依赖于整个后缀树一次加载到内存中的方法。
这个发明出来了吗?
发布于 2015-11-19 01:40:03
所说的“适当”,我指的是不依赖于整个后缀树一次加载到内存中的方法。
据我所知和理解,后缀树没有办法只加载后缀树的一部分并使用它。你可以通过使用一个算法来避免这个问题,比如Aho-Corasick或Boyer-Moore算法,正如前面提到的@fge。
实现的,必须流行的是:https://github.com/abahgat/suffixtree
也有在字符串中找到子串的好的和简单的算法: DNA,它在“编译器:原理,技术和工具”中有很好的描述,例如,这个算法被用于在病毒数据库中搜索病毒签名的反病毒程序中,以及Aho–Corasick algorithm处理中,这是非常令人印象深刻的。
https://stackoverflow.com/questions/33786673
复制相似问题