创建一个最适合在4000万个名称中进行通配符搜索的索引


Creating an Index that is best for wildcard search through 40Million names

任务:在拥有约4000万个名称的数据库中使用通配符搜索名称,以搜索最佳匹配结果。例如,query='John'结果可能是'John'、'Johnny'、'SmithJohn'、'ajoh'
候选:MySQL全文、Sphinx和Lucene
观察:我认为它们都使用反向索引,这可能不是这种短"文档"(名称)的最佳解决方案,而trie可能更适合。

假设这个观察是正确的,那么这些工具的配置是否更适合我的情况?还有其他工具可以在PHP中轻松集成吗?

谢谢。

我只能真正代表斯芬克斯说话。它确实有一个"min_prefix_len",专门启用通配符搜索。

它有两种模式,

1) 单词的每个前缀都是单独存储的(例如Johnny与Johnny、Johnn、John、Joh、Jo、J一起存储),因此每个前缀都会匹配。真正快速的查找,但以牺牲索引大小和索引速度为代价。

2) 原始单词是实际存储的,前缀与这些匹配。更紧凑的索引和快速索引。但是搜索速度不是很好(sphinx还没有实现优化,例如将单词列表存储在trie中。因此,在这种模式下,专用解决方案可能会优于sphinx。

建议在模式1中,sphinx将友好地执行您的任务,并且比mysql更好。(但不知道它与Lucene相比如何)