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

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

一些候选人:

  • Lucene/Lucene 与 Compass/Solr

  • sphinx

  • Postgresql 内置全文搜索

  • MySQl 内置全文搜索

选择标准:

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

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

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

最佳答案

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

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

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

我不知道这对你的情况有多适用,但是 Evan Weaver compared a few of the common Rails search options (Sphinx、Ferret(Ruby 的 Lucene 端口)和 Solr),运行一些基准测试。我猜可能有用。

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

https://stackoverflow.com/questions/737275/

相关文章:

mysql - 如何在 MySQL 中返回数据透视表输出?

mysql - 字符集和排序规则到底是什么意思?

mysql - 在 MySQL 数据库的每个表的字段中搜索文本

mysql - 在性能开始下降之前 MySQL 数据库可以有多大

mysql - 更新列值,替换字符串的一部分

mysql - 表 'performance_schema.session_variables' 不

mysql - 如何修改 MySQL 表中列的大小?

sql - 测试 MySQL 表中是否存在行的最佳方法

mysql - 我应该使用什么列类型/长度将 Bcrypt 散列密码存储在数据库中?

mysql - 如何使用选项从命令行导出和导入 .sql 文件?