java - 快速搜索,无需标记化

标签 java mongodb lucene

我正在寻找一种方法来对一百万个 1 KB 字符串进行快速全文搜索。

加速此类事情的流行方法(Lucene 或 MongoDB 中的文本索引)似乎是通过将内容字符串拆分为索引构建时的标记来获得搜索时的高性能。这些标记基于自然语言单词。但是我想避免这种标记化,因为我想搜索与自然语言单词无关的字符串。

我正在寻找功能类似于 SQL“LIKE '%abc%'”的东西,但不仅仅是“abc”。比如说,对于诸如“a.1”之类的字符串,并使其与诸如“.........a.123........”之类的文档相匹配

我的印象是,理论上,使用 suffix trees 是可能的但我还没有找到合适的 Java 实现。我所说的“适当”是指不依赖于立即将整个后缀树加载到内存中的后缀树。

这个已经发明了吗?

最佳答案

By "appropriate" I mean one that doesn't rely on the entire suffix tree being loaded into memory at once.

据我所知和理解后缀树,没有办法只加载后缀树的一部分并使用它。您可以通过使用算法来避免这种情况,例如 @fge 提到的 Aho-Corasick 或 Boyer-Moore 算法。

必须流行的实现之一是: https://github.com/abahgat/suffixtree

还有一个很好且简单的算法来查找字符串中的子字符串: Aho–Corasick algorithm 例如,“编译器:原理、技术和工具”中对此进行了很好的阐述 该算法用于防病毒软件中,用于在病毒数据库中搜索病毒签名,以及用于 DNA 处理,令人印象深刻。

关于java - 快速搜索,无需标记化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33786673/

相关文章:

带有 Int 数组的 Java HashMap

java - 为什么调用 .getBytes() 时字符串 "¿"会被转换为 "¿"

java - Apache Lucene - 创建和存储索引?

mysql - Solr DIH 与 SQL

java - ElasticSearch 全文搜索

java - 如何从 cordova 插件的服务中访问 Activity ?

javascript - 如何获取网页中元素的x,y坐标?

mongodb - 如何创建一个mongodb包

python - mongoengine : ReferenceFields will default to using ObjectId 中的问题

mongodb - 如何在 MongoDB shell 中打印出 20 多个项目(文档)?