当前位置: 首页 > 面试题库 >

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

毋承基
2023-03-14
问题内容

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

一些候选人:

  • Lucene / Lucene与指南针/ Solr

  • 狮身人面像

  • PostgreSQL内置全文本搜索

  • MySQl内置全文本搜索

选择标准:

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

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

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


问题答案:

很高兴看到有人对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竞争。



 类似资料:
  • Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件。 PHPCMS V9支持这一技术,当然我们需要事先在服务器上做一些相应的部署 英文介绍

  • bugu-mongo 2.x版本集成了Lucene的功能。当往MongoDB中新增一个Document时,能自动为该Document建立Lucene索引。相应的,当MongoDB中的Document被修改、删除时,对应的Lucene索引也会修改、删除。 另外,bugu-mongo还提供了对Lucene搜索的支持。根据Lucene索引进行搜索的时候,搜索结果能自动转换成对应的Entity对象。 在L

  • 搜索引擎分为两部分: 时间筛选 和 搜索引擎 (详情) 1.时间筛选 便捷按钮有今日、昨日、前日、上周 X、近七天,并且能自定义选择时间段来得出想要的结果报表 2.搜索引擎 (时间段详情) 选择日期,查看来自对应时间段内,各个搜索引擎的访问量比例

  • 在测试此文本时,我在要在文本中搜索的列上创建了lucene(3.0.1)索引: 如果我按关键字搜索,它会给出结果,但按 我正在使用standardAnalyzer: 因为已设置,它应创建令牌,并且应存在$GLD。Analyzer将从文本中删除停止字,因为word也将在该过程中删除。

  • lucene 和 es 的前世今生 lucene 是最先进、功能最强大的搜索库。如果直接基于 lucene 开发,非常复杂,即便写一些简单的功能,也要写大量的 Java 代码,需要深入理解原理。 elasticsearch 基于 lucene,隐藏了 lucene 的复杂性,提供了简单易用的 restful api / Java api 接口(另外还有其他语言的 api 接口)。 分布式的文档存储