【问题标题】:Text search technologies for mysql datamysql数据的文本搜索技术
【发布时间】:2013-07-19 21:53:40
【问题描述】:

任务是在我的项目(PHP/Zend Framework 2 + MySQL)中实现MySQL中的文本搜索。问题是文本字段一点都不大,它主要是 VARCHAR 字段或连接字段,如城市名称、公司名称等,每个实体大约 5-10 个字段。 所以目前我决定选择 Lucene(zend framework 2 module - Zend Search),但是对于小的 varchar 字段使用 Lucene 或 Sphinx 之类的技术会有效吗?

谢谢。

【问题讨论】:

  • 你在说多少数据?这是大型工具。
  • modules/tables:不一样,有5k到300k条记录,history表估计有几百万条记录

标签: php mysql sphinx zend-search-lucene


【解决方案1】:

当然,Lucene 或 Sphinx 可以处理任何包含文本的 varchar 列。* 它们不必很大。

任何全文索引解决方案都比使用 LIKE '%word%' 好数百或数千倍!

您可能对我的演示文稿感兴趣,Fulltext Search Throwdown

您还可以观看我作为网络研讨会的演示文稿的录音:http://www.percona.com/webinars/2012-08-22-full-text-search-throwdown(免费但需要注册)。

* Lucene 和 Sphinx 也可以对数字列做一些事情。

PS:我是 Zend Framework 1.0 的项目负责人。 Zend_Search_Lucene 在大约 2007 年是一个有趣的实验,但相对于 Apache Lucene/Solr,它已经过时了,而且 Zend_Search_Lucene 比 Java 实现慢了几个数量级。我不会打扰它。

【讨论】:

  • 嗨,比尔。感谢您的评论和宝贵的介绍。我也期待使用/切换到 percona 服务器。
  • @Bill Karwin 有一个很好的建议。我设计了 PRWeb 的搜索引擎,我们只处理了大约 5000 万份文档,但与使用 RDBMS 进行搜索相比,这是一个相当大的改进。 必要的区别是:搜索线程仍然受到行锁、页锁和表锁的约束。因此,当您添加/更新/索引一系列行时,所有搜索都可能(充其量)打嗝。这种争用对您的数据库来说不是必需的,但会向您的搜索表添加大量读者争用。
  • Percona 是一个不错的选择,但我怀疑他们的顾问会建议您不要将 RDBM 与全文搜索结合起来,除非您的用户群非常小。
  • @memnoch_proxy,我在 Percona 工作,担任顾问和培训师。如果替代方法是使用带有通配符的LIKE,我们建议进行全文搜索。
  • 是的,Java 实现比 Zend_Search_Lucene 快,问题是我们是否试图用大炮杀死一只蝴蝶,关于应用程序的规模和包含字段的小词..
猜你喜欢
  • 2013-09-13
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
  • 2010-12-21
  • 2010-09-22
  • 2017-09-09
  • 2010-09-12
相关资源
最近更新 更多