hul*_*aba 4 algorithm search full-text-search search-engine data-structures
问题背景
大家好,我正在根据提供的查询在一堆文档中搜索相关文档的项目。由于这是一个小型项目,我有一个典型的内存架构,我假设我没有超过 100 个文档,每个文档包含不超过 1000 个单词(一个单词不超过 10 个字符)。我收到很多查询,我必须尽可能快地处理查询(绝对不超过一秒)。
我的第一种方法(幼稚且不可扩展):
由于允许用户上传文档,每当我收到文档时,我都会查找“潜在”关键字并将关键字存储为键,将文档存储为值对或存储在 MYSQL 表中。显然,这必须手动完成,看起来不像程序员会做的。
我的第二种方法(稍微好一点):
我获取每个文档,扫描其中的每个单词并将这个单词添加到 Trie 数据结构中,因此对于 100 个文档,我必须搜索 100 次尝试,如果查询的长度为 l,则这种方法将采用最坏的 O(单词数)跨所有文档*最大单词的长度)以构建特里树并查询 O(查询长度)。这是很合理的。为了实现这一点,我将在每个文档中保留一个 Trie 根节点向量,并迭代每个 trie 节点并在每个 trie 中搜索。如果我得到至少一半的查询词匹配,我就会将该文档存储为潜在结果。结果,我不会提供超过一些截止数量的文件。
我对社区的问题:
我会问你如何看待我的方法?我如何优化它们,我可以在现有方法中做哪些其他改进?通过使用其他算法或数据结构可以更有效地完成这项工作吗?在网上冲浪时,我遇到了像 Boyer-Moore 和 Aho-Corasick 这样的算法,以及一些调整 Lucene Apache 实现的算法等的建议。你在这里有什么建议?