很高兴看到有人插话谈论Lucene,因为我对此一无所知.
斯芬克斯,另一方面,我很清楚,所以让我们看看我是否能帮上忙.
- 结果相关性排名是默认值.您可以根据需要设置自己的排序,并为特定字段赋予更高的权重.
- 索引速度非常快,因为它直接与数据库对话.任何缓慢都将来自复杂的SQL查询、未索引的外键和其他此类问题.我也从来没有注意到任何搜索的缓慢.
- 我是Rails的人,所以我不知道用Django实现有多容易.不过Sphinx源代码附带了一个Python API.
- 搜索服务守护进程(searchd)的内存使用率非常低,您也可以对indexer进程使用的how much memory个内存设置限制.
- 我对可伸缩性的了解更为粗略,但将索引文件复制到多台机器并运行多个searchd守护进程非常简单.不过,我从其他人那里得到的总体印象是,它在高负载下非常好,所以跨多台机器扩展它并不是需要处理的事情.
- 没有对"你的意思是什么"等的支持——尽管这些可以用其他工具轻松完成.Sphinx确实使用字典来词干,所以"driving"和"drive"(例如)在搜索中被认为是相同的.
- Sphinx不允许对字段数据进行部分索引更新.常用的方法是保持一个包含最近所有更改的增量索引,并在每次更改后重新索引(这些新结果会在一两秒钟内出现).由于数据量较小,这可能需要几秒钟的时间.不过,您仍然需要定期对主数据集重新编制索引(尽管频率取决于数据的波动性——每天?每小时?).不过,快速的索引速度让这一切都非常轻松.
我不知道这对你的情况有多适用,但是Evan Weaver compared a few of the common Rails search options(Sphinx、Ferret(Ruby的Lucene端口)和Solr)运行了一些基准测试.我想可能有用.
我还没有深入研究过MySQL的全文搜索,但我知道它在速度和功能方面都无法与Sphinx、Lucene或Solr相媲美.