【问题标题】:Which is best serach technique to search records [closed]哪个是搜索记录的最佳 serach 技术[关闭]
【发布时间】:2011-03-10 00:04:24
【问题描述】:

我有 10,000,000 条记录,这将是搜索记录的最佳技术,目前我正在使用全文搜索,但速度很慢,请建议。

【问题讨论】:

  • 请提供更多信息和代码(关于您的表结构)
  • 向我们提供更多详细信息:您搜索的内容、搜索频率以及这些记录的外观如何? -- 简单地说 -- 请给我们一些例子。
  • 考虑一个有五个表的数据库,我只在一个表上搜索 100 列,其中 20 列被索引为全文。所有列值都是文本值并且经常更改。希望这将有助于大师(你们所有人)。 :)

标签: php mysql text full-text-search


【解决方案1】:

没有万能的解决方案,但您可以尝试:

狮身人面像

如何实现全文搜索 对于那 10+ 百万行表,保持 跟上负载,并保持相关性? 斯芬克斯擅长这些 谜语。

Sphinx 是一个全文搜索引擎, 在 GPL 版本 2 下分发。 商业许可证也可用 用于嵌入式。

一般来说,这是一个独立的搜索 引擎,旨在提供快速, 大小有效且相关的全文 搜索功能到其他 应用程序。狮身人面像特别 旨在与 SQL 很好地集成 数据库和脚本语言。 当前内置数据源 支持通过以下方式获取数据 直接连接到 MySQL 或 PostgreSQL,或使用 XML 管道 机制(到索引器的管道 Sphinx 基于 XML 的特殊格式 认)。

至于名字,Sphinx是首字母缩写 正式解码为 SQL 短语索引。是的,我知道 CMU 的 狮身人面像项目。

http://www.sphinxsearch.com/

Lucene PHP (Part of Zend Framework):

Zend_Search_Lucene 是一个通用的 目的文本搜索引擎编写 完全在 PHP 5 中。因为它存储了它的 文件系统上的索引,而不是 需要一个数据库服务器,它可以添加 几乎所有的搜索功能 PHP 驱动的网站。 Zend_Search_Lucene 支持以下功能:

  • 排名搜索 - 首先返回最佳结果
  • 许多强大的查询类型:短语查询、布尔查询、通配符
    查询、邻近查询、范围
    查询等等。
  • 按特定字段搜索(例如,标题、作者、内容)

http://framework.zend.com/ http://framework.zend.com/manual/en/zend.search.lucene.overview.html

【讨论】:

  • +1 推荐 Zend_Lucene。从来没有将它用于这么多项目,但从来没有遇到过性能问题。
【解决方案2】:

这取决于几个简单的问题:

  • 处理什么样的数据? (像“Firstname, Lastname”这样的简单条目或更复杂的数据集?
  • 它的结构如何? (普通数据库表?分区?)
  • 您要搜索什么? (即在电话簿中搜索姓名)

【讨论】:

    【解决方案3】:

    因为我没有使用过像这样的大型数据集,所以这里有一些可能可行的想法:

    第一个问题是这些记录是否是静态的(例如 geoip)?

    • 我会尽量优化我的数据库(如果您使用 MySQL,请尝试使用 EXPLAIN)
    • 寻找可能的各种查询,尝试针对这些查询优化您的数据库
    • 如果索引没问题,我会使用某种缓存来保存我以前的结果集。当您的数据库没有定期更新时,这会很方便。
    • 您可以 cron 上面的作业(例如:最常用的搜索查询及其结果也可以预缓存)
    • 尝试根据您的需求优化这些想法

    如果您可以提供更多详细信息,也许我可以完善我的提示。

    【讨论】:

    • 这些是非常有帮助的技术人员,谢谢
    【解决方案4】:

    使用 Solr 。它是 lucene,带有一些可以通过 http 协议轻松访问的附加功能。与 mysql 的任何全文搜索相比,它的速度非常快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 2016-08-25
      • 2017-04-11
      • 2013-04-14
      • 2013-08-01
      相关资源
      最近更新 更多