Php 创建最适合通过4000万个名称进行通配符搜索的索引

Php 创建最适合通过4000万个名称进行通配符搜索的索引,php,search,lucene,full-text-search,sphinx,Php,Search,Lucene,Full Text Search,Sphinx,任务:在具有约4000万个名称的数据库中使用通配符搜索名称搜索的最佳匹配结果。e、 g.query='John'结果可能是'John','johny','Smith John','ajohn' 候选者:MySQL全文、斯芬克斯和Lucene。 观察:我假设它们都使用反向索引,这可能不是如此短的“文档”(名称)的最佳解决方案,而trie可能更合适 假设这个观察是正确的,这些工具是否有更适合我的情况的配置?还有其他工具可以轻松集成到PHP中吗 谢谢。我只能代表斯芬克斯说话。它确实有一个“min_pr

任务:在具有约4000万个名称的数据库中使用通配符搜索名称搜索的最佳匹配结果。e、 g.query='John'结果可能是'John','johny','Smith John','ajohn'
候选者:MySQL全文、斯芬克斯和Lucene。
观察:我假设它们都使用反向索引,这可能不是如此短的“文档”(名称)的最佳解决方案,而trie可能更合适

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


谢谢。

我只能代表斯芬克斯说话。它确实有一个“min_prefix_len”,专门支持通配符搜索

有两种模式,

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

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


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

您说的“比mysql更好”,有多好?我假设构建索引将使插入工作更慢,与全文mysql索引相比有多慢?选择将是x倍多?