高效的MySQL文本搜索

坏的

我有一个使用MySQL用PHP编写的论坛,并且希望提供论坛搜索。它将允许用户搜索特定的字符串,并过滤发布日期和主题等元数据。因为大多数这些字段都已编入索引,所以可以有效地搜索元数据,但是我认为主要的用例当然是普通的文本搜索,而无需使用会修剪结果的元数据过滤器。

经过一些测试,我发现,与大多数人的设置相反,SQL_CALC_FOUND_ROWS为了获得结果数量,比两次执行查询要快得多(约1.5倍),因此,我拥有的最佳查询是:

SQL_CALC_FOUND_ROWS * from blahblah where content like '%term%' limit whatever whatever;

毫不奇怪,这确实很慢,因为它必须对数据库中的每个论坛帖子进行文本匹配。我有什么可以改善的吗?使用LIKE运算符时,在内容(TEXT)字段上添加索引是否有帮助通常如何做到这一点?

GolezTrol

即使使用like运算符,该列上的索引也将有所帮助,但当开头也有通配符时,该索引将无济于事。因此,term%对于索引而言将是有益的,但%term%对它而言则无济于事。

但是,您可以看看FULLTEXT索引。如果将这样的索引添加到TEXT字段中,则MySQL会对单独的单词进行索引,并允许您进行各种类似于搜索引擎的搜索。要搜索,请使用MATCH() ... AGAINST代替LIKE

参见文档:https : //dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

免责声明:我建议您在第一次实验后仔细阅读文档。FULLTEXT索引功能强大,但仍有其局限性。

FULLTEXT索引占用相当大的空间,并且它们的构建方式取决于MySQL中的核心设置,因此它们在本地设置和服务器之间的行为可能有所不同。

例如,它们索引完整的单词,但忽略非常短的单词和某些停用词。另外,由于它们索引单词,因此您将无法搜索单词的一部分。寻找'term'不会找到开箱即用的'determine'。

因此,请确保这些索引可以执行您想要的操作,并且如果您拥有共享的托管服务,请确保在进行大型实现之前可以按照自己喜欢的方式对其进行配置和调整。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

语言依赖行时高效的全文本搜索

来自分类Dev

使用PHP,MySQL进行多面搜索(高效)计算产品计数

来自分类Dev

高效的字典搜索?

来自分类Dev

高效搜索嵌套列表

来自分类Dev

高效搜索嵌套列表

来自分类Dev

来自文本框的MySQL搜索值

来自分类Dev

MySQL搜索文本在一栏中

来自分类Dev

MySQL-具有部分单词匹配和相关性分数(FULLTEXT)的高效搜索

来自分类Dev

MySQL高效查询

来自分类Dev

在HTML / XML文件中高效搜索

来自分类Dev

高效搜索用户名的SQL

来自分类Dev

在data.frame中进行高效搜索

来自分类Dev

高效搜索用户名的SQL

来自分类Dev

根据“开始于”进行高效搜索

来自分类Dev

非单调数组中的高效 Numpy 搜索

来自分类Dev

Javascript 中 obj 数组的高效搜索

来自分类Dev

在MySQL中搜索包含换行符的文本

来自分类Dev

MySQL INSTR帮助仅搜索匹配更多文本的1行

来自分类Dev

Mysql仅在文本中搜索“ 7”而不是“ 17”

来自分类Dev

MySQL-从多列搜索中返回匹配的文本

来自分类Dev

如何规范要在MySQL数据库中搜索的文本?

来自分类Dev

在Coumn中搜索一些文本(MySQL)

来自分类Dev

在MySQL中搜索包含换行符的文本

来自分类Dev

mysql 从多个文本框中搜索多个单词 php

来自分类Dev

更高效的MySQL子查询?

来自分类Dev

从文本中高效提取WikiData实体

来自分类Dev

文本对齐底部的高效和响应方式

来自分类Dev

Mysql:我需要搜索记录,其中搜索到的文本与第三个单词匹配

来自分类Dev

Mysql:我需要搜索记录,其中搜索到的文本与第三个单词匹配