2010-06-30 74 views
4

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

+0

请给出一些更多的信息和代码(关于您的表格结构) – Thariama 2010-06-30 07:41:19

+0

给我们更多的细节:你在搜索什么,这些记录的频率和方式如何? - 简单地说 - 请给我们一些例子。 – 2010-06-30 07:42:37

+0

考虑一个包含五个表的数据库的情况,并且我只在一个表上用100列进行选择,其中20个用于全文索引。 所有的列值都是文本值并经常变化。这会帮助大师(你们全部)。 :) – Jos 2010-06-30 07:47:44

回答

1

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

  • 什么样的数据进行处理? (简单的条目,如“名字,姓氏”,或更复杂的数据集?
  • 它是如何构成的?(普通数据库表?分区?)
  • 你怎么寻找?(即搜索在电话目录名)
7

没有一个放之四海而皆准的解决办法,但你可以尝试一下:

狮身人面像

如何实现全文海对于1000万行以上的表格,请保留 并保持相关性? 狮身人面像擅长那些 谜语。

斯芬克斯是全文搜索引擎, GPL版本2 商业许可下发布的,也是嵌入式应用提供 。

一般来说,它是一个独立的搜索引擎 ,旨在为客户提供快捷, 规模效益和有关全文 搜索功能到其它 应用。 Sphinx特别设计用于与SQL 数据库和脚本语言很好地集成。 目前内置的数据源 支持读取数据或者通过 直接连接到MySQL或PostgreSQL的 或使用XML管道 机制(一管索引中狮身人面像 识别 特殊的基于XML的格式)。

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

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

+0

+1用于提示Zend_Lucene。从来没有用过这么多的东西,但从来没有性能问题。 – Maerlyn 2010-06-30 09:19:14

0

,因为我没有这么大的数据集这样的在这里工作有一些想法,可能工作:

第一个问题是,这些记录是静态的(geoip的例子)或不?

  • 我会尝试尽可能多的优化我的数据库,我可以(尝试使用EXPLAIN如果你使用MySQL)
  • 查找出每一个类型的查询,可以是有可能,尽量优化数据库针对这些查询
  • 如果索引很好,我会用某种缓存去保存以前的结果集。当你的数据库没有正式更新时,这会很方便。
  • 可以和cron上面的工作(例如:最常用的搜索查询及其结果可以过预缓存)
  • 尝试优化这些想法为您的需求

如果你也许可以提供一些更多的细节我可以改进我的提示。

+0

这些都是非常有用的技术感谢 – Jos 2010-06-30 08:02:19

0

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

相关问题