我在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,我可能会得到我想要的结果,但是如果它变得很大,我觉得它不适合我的桌子吗?
感谢任何帮助;我是这一切的真正的初学者,我一整天都在谷歌搜索:(
答案 0 :(得分:1)
您需要搜索什么?当您考虑到搜索的限制时,通常可以找到优化。例如,如果您只需要找到具有特定文本的开始的所有行,则可以添加一个简单的索引并使用LIKE
,这将立即生成结果。
一般来说,如果一个简单的相等或LIKE会做,那些可能会表现最好。无论如何,regexp将进行全面扫描。然而,即使有100,000行,它仍然只需要20MB的RAM,所以全部扫描所有这些都不会很慢(除非你在古老的服务器上)。
我会说 - 首先尝试简单的方法,看看会发生什么。如果性能达到不可接受的水平,您应该可以轻松地改变您的方法。毕竟 - 你确实说网站很小。
已添加:请阅读您的更新。听起来像MySQL的全文索引的工作。试试它是否适合你。
答案 1 :(得分:1)
LIKE
将在加载时失败。<强> '苹果*'强>
查找包含诸如的单词的行 “苹果”,“苹果”,“苹果酱”,或 “小应用程序”。
我不明白你被拒绝的原因。我可能会使用第三方的东西,因为没有大型网站使用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)