用我的MYSQL db搜索哪种方法

时间:2011-06-29 11:06:23

标签: php mysql

我在php&中创建一个(小)网站MySQL的。 mysql数据库由一个表组成,可能有数万行(将来)。

我只需要从一个字符限制为200的列中获取结果。

考虑到我不想要任何停用词或“常用”字词功能;并且该列包含文件名(一些具有特殊字符),您会推荐什么类型的搜索?

编辑:关于文件名的更多澄清:
我不想做完全匹配;说我的名字是这样的:[abc] _random_file.txt;搜索“abc random”或“[abc] random”或“abc txt”应该全部匹配。希望这是有道理的。

我考虑过:

1 ---- SQL之类的声明
2 ---- SQL regexps(如本网站所示:http://www.iamcal.com/publish/articles/php/search/
3 ---- Mysql全文搜索(MyISAM)
4 ----第三方搜索引擎(真的不想这样做)

使用#2,我可能会得到我想要的结果,但是如果它变得很大,我觉得它不适合我的桌子吗?

感谢任何帮助;我是这一切的真正的初学者,我一整天都在谷歌搜索:(

3 个答案:

答案 0 :(得分:1)

您需要搜索什么?当您考虑到搜索的限制时,通常可以找到优化。例如,如果您只需要找到具有特定文本的开始的所有行,则可以添加一个简单的索引并使用LIKE,这将立即生成结果。

一般来说,如果一个简单的相等或LIKE会做,那些可能会表现最好。无论如何,regexp将进行全面扫描。然而,即使有100,000行,它仍然只需要20MB的RAM,所以全部扫描所有这些都不会很慢(除非你在古老的服务器上)。

我会说 - 首先尝试简单的方法,看看会发生什么。如果性能达到不可接受的水平,您应该可以轻松地改变您的方法。毕竟 - 你确实说网站很小。

已添加:请阅读您的更新。听起来像MySQL的全文索引的工作。试试它是否适合你。

答案 1 :(得分:1)

  1. SQL LIKE无法扩展(Flickr也已结束)
  2. 我也很害怕LIKE将在加载时失败。
  3. 我认为你应该尝试使用它。我认为此页面可能会帮助您实现目标=> http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html
  4.   

    <强> '苹果*'

         

    查找包含诸如的单词的行   “苹果”,“苹果”,“苹果酱”,或   “小应用程序”。

    1. 更好的是第三方。
    2. 我不明白你被拒绝的原因。我可能会使用第三方的东西,因为没有大型网站使用MySQL FULL TEXT进行搜索:


      http://www.quora.com/Why-dont-any-of-the-popular-NoSQL-solutions-include-full-text-search

        

      作为部署和管理的人   全文搜索和NoSQL   适用于大型网站的服务器,   这是我的2美分:

           

      全文搜索并不容易   问题。这很好理解,   但它需要相当多的   工程努力和专业   知识真的,真的很好   并获得所有细节。和   没有人想要半搜索   系统内置于其产品中 - 或   一个有着奇怪限制的。

           

      MySQL有全文搜索,但没有   不好,但它确实只是   在MyISAM存储中实现   发动机。但所有酷孩子都在使用   这些天InnoDB,所以它主要是   无用或需要重复   数据。呸。

           

      就我个人而言,我是Sphinx的粉丝   可以内置到MySQL或使用   独立,这是我们如何使用它   为Craigslist。我们也准备好了   将配对的MongoDB部署   使用Sphinx进行全文搜索。所以   你可能会认为我等不及了   直到10gen实现全文   搜索到MongoDB,对吧?

           

      不是。

           

      我订阅了Unix的哲学   拥有更少的工具   事情,但做得很好。什么   我已经向Dwight建议了(也许   艾略特也是?)是MongoDB应该的   有一个标准的插件接口   在各种全文搜索解决方案中。   也就是说,它需要一种通知方式   新的/更改/删除的外部工具   文件,以便他们可以处理   适当。 (鉴于MongoDB的   oplog,这在某些方面似乎可行   电平。)

           

      现在我完全知道Riak有一个   已经回答了。我知道10gen   无论如何都会将它构建到MongoDB中。如   他们觉得,技术提供者   强烈要求人们想要“完整”   开箱即用的解决方案   很多人。但它(全文)是   永远不会成为那种东西   在这些版本1.0中发布   产品。它根本不是一个   “核心”功能。

           

      值得注意的是,来自a   性能和调整的观点,   搜索是不同的文件(或   检索,可以   复杂的部署也很重要。

答案 2 :(得分:0)

你试过狮身人面像吗? 请参阅:http://www.ibm.com/developerworks/library/os-php-sphinxsearch/