全文搜索引擎比较——Lucene、Sphinx、Postgresql、MySQL? [关闭]

2024-02-20

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

几位候选人:

  • Lucene/Lucene 与 Compass/Solr

  • Sphinx

  • Postgresql 内置全文搜索

  • MySQl内置全文搜索

选择标准:

  • 结果相关性和排名
  • 搜索和索引速度
  • 易于使用并易于与 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(使用前将#替换为@)

全文搜索引擎比较——Lucene、Sphinx、Postgresql、MySQL? [关闭] 的相关文章

  • 如何在MySQL选择查询中编写正则表达式?

    我尝试过这个表达 b word w b i比较一个word对照其他单词列表来查找重复项 我用了preg math all 效果很好 我想做同样的事情 但这次检查从 mysql 数据库检索到的单词 这是我写的 SELECT FROM tabl
  • 用于添加和删除客户名称的 Web 表单出现问题

    我正在尝试创建一个 Web 表单 其中列出了所有客户 然后为您提供一个文本字段 旁边有一个按钮 您可以在其中添加客户 然后它应该显示客户列表 旁边有删除按钮 您可以单击该按钮从数据库中删除客户 我正在让它发挥作用 对于初学者来说 它会回显
  • 使用 LIKE 和撇号的 Mysql 查询问题

    所以我有一个有趣的问题 我从未遇到过 并且似乎找不到太多有关纠正该问题的信息 我有一个庞大的数据库 里面有大量的数据 相当于 10 年的数据 并试图对其进行搜索 现在搜索功能运行良好 但最近有人让我注意到一个 错误 如果你愿意的话 我尝试对
  • 安全转义表名/列名

    我在 php 中使用 PDO 因此无法使用准备好的语句转义表名或列名 以下是我自己实现它的万无一失的方法 tn str replace REQUEST tn column str replace REQUEST column sql SEL
  • BigDecimal 的 JPA @Size 注释

    我该如何使用 SizeMySQL 的注释DECIMAL x y 列 我在用着BigDecimal 但是当我尝试包括 Size max它不起作用 这是我的代码 Size max 7 2 Column name weight private B
  • 从本地 html/javascript 网站插入 mySQL 数据库

    我正在尝试做什么 我的程序的目的是插入数据local HTML JS网站变成online 非本地 mySQL数据库 到目前为止我尝试过的 我试图用来实现此目的的原始方法是让我的本地网站使用 javascript 通过在线发布数据PHP文件
  • 使用 PHP 和 jSON 从 MySQL 获取 UIImage

    我正在开发一个小型新闻阅读器 它通过对 URL 执行 POST 请求来从网站检索信息 响应是一个带有未读新闻的 JSON 对象 例如 应用程序上的最新新闻的时间戳为 2013 03 01 当用户刷新表时 它会发布 domain com ap
  • 向 yahoo 和 hotmail 用户发送电子邮件?

    我正在使用 php 和 mysql 每次用户在我的网站上注册时 我都会使用 php mail 发送一封电子邮件进行身份验证 最近我发现 很多Yahoo和Hotmail用户还没有激活他们的帐户 假设 1000 个用户中 只有 200 个被激活
  • 在单个查询中设置和选择?

    我想知道是否可以在单个查询中设置和选择 像这样的事情 SET LOCAL search path TO 1 SET LOCAL ROLE user SELECT from posts 你可以这样做 with some set as sele
  • Mysql:计算访问频率

    我有这张桌子 CREATE OR REPLACE TABLE hits ip bigint page VARCHAR 256 agent VARCHAR 1000 date datetime 我想计算每个页面的 googlebot 访问频率
  • 多个数据库连接

    我有三张桌子 categories content info and content The categories表包含类别的id及其 IDparent类别 The content info包含两列 entry id帖子的 ID 和cat
  • 如何将值从 android 传递到 php Web 服务并检索它?

    我正在尝试将一个值传递给我的 php web 服务 我已经使用此代码来传递 名称 值 private class MyAsyncTask extends AsyncTask
  • ER_NOT_SUPPORTED_AUTH_MODE:客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端

    Nodejs中使用mysql的问题 const mysql require mysql var connection mysql createConnection host localhost user root password 1234
  • 从 datagridview 选定的行更新 mysql 数据库

    我有一个 datagridview 它在表单加载事件上加载 mysql 数据库表 t pi clients 并且我有另一个选项卡 其中包含 t pi client 相应列的文本框 它能够从 fullrowselect 模式获取数据到这些文本
  • 子查询与连接

    我重构了从另一家公司继承的应用程序的一个缓慢部分 以使用内部联接而不是子查询 例如 WHERE id IN SELECT id FROM 重构后的查询运行速度提高了约 100 倍 50 秒到 0 3 我预计会有改进 但谁能解释为什么它如此剧
  • mysqli_stmt_bind_result 的奇怪问题

    好吧 这让我很烦恼 我似乎在 PHP 文档中找不到任何内容 在 Google resultosphere 中也找不到任何内容 所以也许有人可以在这里提供帮助 我正在使用准备好的语句 绑定结果 然后使用这些绑定结果来填充下拉列表 例子
  • 如何在 PostgreSQL 中克隆记录

    我想循环查询 但也保留下一个循环的实际记录 这样我就可以比较两个相邻的行 CREATE OR REPLACE FUNCTION public test RETURNS void AS body DECLARE previous RECORD
  • 从 JSON 数组创建标记 php mySQL Google Maps v2 android

    我正在尝试从 mySQL 数据库在 Google Maps v2 上创建标记 但它不起作用 地图确实出现了 但没有标记 谁能告诉我出了什么问题以及我需要改变什么 我也尝试过让 getDouble 为 getDouble 0 和 getDou
  • MySQL:查询中周数的周日期范围

    我有一个看起来像这样的数据库表 id clock info 1 1262556754 some info 2 1262556230 some other info 3 1262556988 and another 4 1262555678
  • 如何使组合键唯一?

    I am making a database of students in one school Here is what I have so far 如果您不喜欢阅读 请跳至 简而言之 部分 问题是我对这个设计并不满意 我想要的组合gra

随机推荐