哪种搜索技术是搜索记录的最佳技术?

4

我有一千万条记录,最好的搜索技术是什么?目前我正在使用全文搜索,但速度很慢,请给予建议。


请提供更多关于您的表结构的信息和代码。 - Thariama
请给我们更多细节:您在寻找什么,频率如何以及这些记录的样子是怎样的?简单地说,请给我们一些例子。 - Grzegorz Gierlik
考虑一个包含五个表格的数据库,我只在其中一个拥有100列并且其中20列建立了全文索引的表格中进行搜索。所有列的值都是文本值,并且经常更改。希望这对大家有所帮助。 :) - Jos
4个回答

7

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

Sphinx

如何为包含1000万行数据的表实现全文搜索,跟上负载并保持相关性?Sphinx非常擅长处理这些谜题。

Sphinx是一款全文搜索引擎,根据GPL版本2发布。也提供商业许可证以用于嵌入式使用。

通常情况下,它是一个独立的搜索引擎,旨在为其他应用程序提供快速、大小高效和相关的全文搜索功能。Sphinx专门设计为与SQL数据库和脚本语言良好集成。目前内置的数据源支持通过直接连接到MySQL或PostgreSQL获取数据,或使用XML管道机制(一种特殊的基于XML格式的管道,Sphinx能够识别)。

至于名称,Sphinx是一个缩写,官方解码为SQL Phrase Index。是的,我知道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

+1 建议使用 Zend_Lucene。虽然没有用过处理这么多项数据,但是从来没有性能问题。 - Maerlyn

1

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

  • 所处理的数据是什么类型的?(像“名字,姓氏”这样的简单条目还是更复杂的数据集?
  • 它的结构是怎样的?(普通的数据库表?分区的?)
  • 你要搜索什么?(比如在电话簿中搜索姓名)

0

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

首先问题是这些记录是静态的(例如geoip)还是动态的?

  • 尽可能优化我的数据库(如果您使用MySQL,请尝试使用EXPLAIN
  • 寻找可能存在的各种查询类型,尝试针对这些查询优化您的数据库
  • 如果索引正常,我会使用某种缓存来保存以前的结果集。当您的数据库不经常更新时,这将非常方便。
  • 您可以计划上述作业(例如:最常用的搜索查询及其结果也可以预缓存)
  • 尝试根据您的需求优化这些想法

如果您能提供更多细节,也许我可以完善我的建议。


这些技术非常有用,谢谢。 - Jos

0
使用Solr。它是基于Lucene的,通过HTTP协议轻松访问一些附加功能。与MySQL的全文搜索相比,它速度非常快。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接