小编典典

全文搜索引擎对比——Lucene、Sphinx、Postgresql、MySQL?

all

我正在构建一个 Django 站点,并且正在寻找一个搜索引擎。

几个候选人:

  • Lucene/Lucene 与 Compass/Solr

  • 狮身人面像

  • Postgresql 内置全文搜索

  • MySQl 内置全文搜索

选择标准:

  • 结果相关性和排名
  • 搜索和索引速度
  • 易于使用且易于与 Django 集成
  • 资源需求 - 站点将托管在VPS上,因此理想情况下,搜索引擎不需要大量 RAM 和 CPU
  • 可扩展性
  • 额外的功能,例如“你的意思是?”、相关搜索等

任何对上述搜索引擎或未在列表中的其他引擎有经验的人——我很想听听您的意见。

编辑:至于索引需求,随着用户不断向网站输入数据,这些数据需要不断地被索引。它不一定是实时的,但理想情况下,新数据会出现在索引中,延迟不超过 15 - 30
分钟


阅读 79

收藏
2022-04-11

共1个答案

小编典典

很高兴看到有人对 Lucene 发表意见——因为我对此一无所知。

另一方面,狮身人面像,我很了解,所以让我们看看我是否能提供一些帮助。

  • 结果相关性排名是默认值。您可以根据需要设置自己的排序,并为特定字段赋予更高的权重。
  • 索引速度非常快,因为它直接与数据库对话。任何缓慢都将来自复杂的 SQL 查询和未索引的外键以及其他此类问题。我也从未注意到搜索有任何缓慢。
  • 我是 Rails 人,所以我不知道用 Django 实现它有多容易。不过,Sphinx 源代码附带了一个 Python API。
  • 搜索服务守护进程 (searchd) 的内存使用率非常低 - 您也可以设置索引器进程使用的内存量限制。
  • 可扩展性是我的知识比较粗略的地方——但是将索引文件复制到多台机器并运行多个 searchd 守护程序很容易。不过,我从其他人那里得到的总体印象是,它在高负载下非常好,因此在多台机器上扩展它并不是需要处理的事情。
  • 不支持’did-you-mean’等 - 尽管这些可以使用其他工具轻松完成。Sphinx 虽然使用字典来做词干,所以“驾驶”和“驾驶”(例如)在搜索中会被认为是相同的。
  • Sphinx 不允许字段数据的部分索引更新。常见的方法是维护一个包含所有最近更改的增量索引,并在每次更改后重新索引(这些新结果会在一两秒内出现)。由于数据量很小,这可能需要几秒钟的时间。不过,您仍然需要定期重新索引主数据集(尽管多久定期取决于数据的波动性 - 每天?每小时?)。不过,快速的索引速度让这一切都变得非常轻松。

我不知道这对您的情况有多适用,但Evan Weaver 比较了一些常见的 Rails
搜索选项
(Sphinx、Ferret(Ruby 的 Lucene 端口)和 Solr),并运行了一些基准测试。可能有用,我猜。

我没有深入研究 MySQL 全文搜索的深度,但我知道它在速度和功能方面都无法与 Sphinx、Lucene 或 Solr 竞争。

2022-04-11