哪种搜索记录最好的serach技术

时间:2010-06-30 07:37:23

标签: php mysql text full-text-search

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

4 个答案:

答案 0 :(得分:7)

没有一个通用的解决方案,但您可以尝试:

Sphinx

  

如何实施全文搜索   对于那个超过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 :(得分:1)

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

  • 处理了哪种数据? (简单的条目,如“名字,姓氏”或更复杂的数据集?
  • 结构如何? (普通数据库表?分区?)
  • 你在搜索什么? (即在电话簿中搜索姓名)

答案 2 :(得分:0)

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

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

  • 我尽可能地尝试优化我的数据库(如果你使用MySQL,请尝试使用EXPLAIN
  • 注意可能存在的各种查询,尝试根据这些查询优化数据库
  • 如果索引很好,我会使用某种缓存来保存以前的结果集。当您的数据库没有定期更新时,这将非常方便。
  • 您可以参与上述工作(例如:最常用的搜索查询及其结果也可以预先处理)
  • 尝试根据您的需求优化这些想法

如果您可以提供更多详细信息,我可以改进我的提示。

答案 3 :(得分:0)

使用Solr。它是lucene,可以通过http协议轻松访问。与从mysql进行的任何全文搜索相比,它的速度非常快。