我正在构建一个 Django 网站,并且正在寻找一个搜索引擎。
几位候选人:
选择标准:
- 结果相关性和排名
- 搜索和索引速度
- 易于使用并易于与 Django 集成
- 资源要求 - 站点将托管在VPS http://en.wikipedia.org/wiki/Virtual_private_server,所以理想情况下搜索引擎不需要大量 RAM 和 CPU
- 可扩展性
- 额外的功能,例如“您是说吗?”、相关搜索等
任何使用过上述搜索引擎或列表中未列出的其他引擎的人 - 我很想听听您的意见。
编辑:对于索引需求,随着用户不断将数据输入站点,这些数据需要连续索引。它不一定是实时的,但理想情况下,新数据将显示在索引中,延迟不超过 15 - 30 分钟
很高兴看到有人插话关于 Lucene - 因为我对此一无所知。
另一方面,狮身人面像我很了解,所以让我们看看我是否可以提供一些帮助。
- 结果相关性排名是默认值。您可以根据需要设置自己的排序,并给予特定字段更高的权重。
- 索引速度非常快,因为它直接与数据库对话。任何缓慢都将来自复杂的 SQL 查询和未索引的外键以及其他此类问题。我也从未注意到搜索有任何缓慢。
- 我是 Rails 人员,所以我不知道用 Django 实现它有多容易。 Sphinx 源代码附带了一个 Python API。
- 搜索服务守护进程 (searchd) 的内存使用量非常低 - 并且您可以设置限制多少内存 http://www.sphinxsearch.com/docs/manual-0.9.8.html#conf-mem-limit索引器进程也使用。
- 可扩展性是我的知识比较粗略的地方 - 但将索引文件复制到多台机器并运行多个 searchd 守护进程很容易。不过,我从其他人那里得到的总体印象是,它在高负载下非常好,因此不需要处理跨多台机器的扩展。
- 不支持“你的意思是”等 - 尽管这些可以使用其他工具轻松完成。 Sphinx 通过使用词典来提取词干,因此“驾驶”和“驾驶”(例如)在搜索中将被视为相同。
- 但 Sphinx 不允许字段数据的部分索引更新。常见的方法是维护包含所有最近更改的增量索引,并在每次更改后重新索引(这些新结果会在一两秒内出现)。由于数据量较小,这可能需要几秒钟的时间。不过,您仍然需要定期重新索引主数据集(尽管定期程度取决于数据的波动性 - 每天?每小时?)。不过,快速的索引速度使这一切变得非常轻松。
我不知道这对你的情况有多适用,但是Evan Weaver 比较了一些常见的 Rails 搜索选项 http://blog.evanweaver.com/articles/2008/03/17/rails-search-benchmarks/(Sphinx、Ferret(Lucene for Ruby 的一个端口)和 Solr),运行一些基准测试。我想可能会有用。
我还没有深入研究 MySQL 的全文搜索,但我知道它在速度和功能方面都无法与 Sphinx、Lucene 或 Solr 竞争。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)