0

任务:在具有约 4000 万个名称的数据库中使用通配符搜索名称搜索的最佳匹配结果。例如 query='John' 结果可能是 'John'、'Johnny'、'Smith John'、'ajohn'
候选人:MySQL 全文、Sphinx 和 Lucene。
观察:我假设它们都使用倒排索引,这可能不是此类短“文档”(名称)的最佳解决方案,并且 trie 可能更合适。

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

谢谢。

4

1 回答 1

2

我只能为斯芬克斯说话。它确实有一个专门启用通配符搜索的“min_prefix_len”。

它有两种模式,

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

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

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

于 2012-09-03T11:20:27.557 回答