一尘不染

全文搜索引擎的比较-Lucene,Sphinx,Postgresql,MySQL?

mysql

我正在建立Django网站,并且正在寻找搜索引擎。

一些候选人:

  • Lucene / Lucene与指南针/ Solr

  • 狮身人面像

  • PostgreSQL内置全文本搜索

  • MySQl内置全文本搜索

选择标准:

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

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

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


阅读 422

收藏
2020-05-17

共1个答案

一尘不染

很高兴看到有人对Lucene情有独钟-因为我对此一无所知。

另一方面,狮身人面像我很了解,所以让我们看看我是否可以帮上忙。

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

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

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

2020-05-17