- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MySQL全文索引应用简明教程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1
|
MATCH (列名1, 列名2,…) AGAINST (搜索字符串 [搜索修饰符])
|
其中在match里面指定的列名1、2等,就是在建立全文索引中指定的列名, 后面的搜索修饰符说明如下:
1
2
3
4
5
6
7
8
|
search_modifier:
{
IN
NATURAL LANGUAGE MODE
|
IN
NATURAL LANGUAGE MODE
WITH
QUERY EXPANSION
|
IN
BOOLEAN MODE
|
WITH
QUERY EXPANSION
}
|
上面的搜索修饰符,实际上说明了3种全文搜索类型 。
简介:默认的搜索形式(不加任何搜索修饰符或者修饰符为 IN NATURAL LANGUAGE MODE 的情况) 。
特点:
简介:布尔模式搜索(搜索修饰符为IN BOOLEAN MODE的情况) 。
特点:
WITH QUERY EXPANSION 。
简介:一种稍微复杂的搜索形式,实际上是进行了2次自然搜索,可以返回记录直接简介性关系的记录,修饰词IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION 或者WITH QUERY EXPANSION modifier 。
特点:这种类型的搜素,实际上提供了一种间接的搜索功能,比如:我搜索某个词,而且返回的第一行中却不包含搜索词中的任意字符串。可以根据第一次搜索结果的记录词进行第二次匹配,从而可能找到一些间接关系的匹配记录.
几种搜索类型的实例介绍 。
IN NATURAL LANGUAGE MODE模式下的应用:
还是应用在product表,其中在name字段我们建立了全文索引,因为我需要根据关键词在name列匹配出相关记录 。
Sql语句如下:
1
|
SELECT
*
FROM
product
WHERE
match(
name
) against(‘auto')
|
时间还不错,在将近87w的记录中命中了1w多条,耗时1.15秒,效果还是不错 。
注意:在默认的情况下已经是根据相关性从高到低返回记录了 。
我们可以SELECT match(name) against(‘auto') FROM product 查看记录的相关性值,值都在0和1之间, 0代表记录不匹配 。
重要的几个特性:
1. 哪些词会被忽略 。
搜索词太短 默认全文索引认为4个以上字符的单词是有效词,我们可以在配置中修改ft_min_word_len进行配置 屏蔽词表中的词 默认的全文索引将一些常用词屏蔽掉,因为这些词太常见了,没有任何语义作用,所以搜索过程中是忽略不计的。当然这个列表也是可以配置的。 2. 如何进行分词的 。
全文索引认为一个连续的有效字符(正则中\w匹配的字符集)是一个单词,也可以包含一个“'”, 但是连续的两个'会被认为是一个分隔符。其他的分隔符如:空格、逗号、句点等 。
IN BOOLEAN MODE 模式下的应用:
在布尔匹配模式中,我们可以添加一些特殊的符号,增加一些搜索过程的逻辑功能。如官方网站中提供的实例(搜索含有mysql字符串 且 不含Yousql的语句):
1
2
|
SELECT
*
FROM
articles
WHERE
MATCH (title,body)
-> AGAINST (‘+MySQL -YourSQL'
IN
BOOLEAN MODE);
|
可见,我们对搜索的控制又多了一些,看起来“高大上”了些.
实际上,上面的操作隐含了几个意思:
加号:相当于and 减号:相当于not 没有:相当于or 。
下面看下布尔类型搜索的几个重要特性:
1. 没有50%记录选择性的限制,即使搜索结果记录超过总数的50%也同样返回结果 2. 不会自动的按记录的相关性进行降序排序 3. 可以直接应用在没有创建fulltext的全文索引上,但是这样会查询的非常慢,所以说还是别用了。 4. 支持最小、最大单词长度 5. 应用屏蔽词列表 。
布尔搜索支持的操作符:
n 加号 +:指示修饰的单词必须出现在记录中 n 减号 -:指示修饰的单词必须不能出现在记录中 n 没有任何操作符:单词可有可无,但是包含该词的记录相关性高 n 双引号 “ : 将一个词组作为一个匹配。如:”one word” 匹配one word在一起的单词 。
下面是官方的一些实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
至少包含一个词的记录
‘apple banana'
必须包含着两个词
‘+apple +juice'
必须包含apple,包含macintosh的记录相关性高,也可以不包含
‘+apple macintosh'
必须包含apple且不能喊有macintosh
‘+apple -macintosh'
查找apple开头单词的记录
‘apple*'
完整匹配some words单词
‘”some words”‘
|
了解了基本的mysql全文索引知识,觉得它的全文索引比like当然是强了很多。但是面对高级的搜索还是略显简陋,且性能问题也是担忧.
本人只是作为入门了解,也是对官网一些基本知识的翻译.
原文链接:http://www.cnblogs.com/lyroge/p/3837899.html 。
最后此篇关于MySQL全文索引应用简明教程的文章就讲到这里了,如果你想了解更多关于MySQL全文索引应用简明教程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
有没有办法对 Subversion 存储库执行全文搜索,包括所有历史记录? 例如,我编写了一个在某处使用过的功能,但后来不需要它,所以我对文件进行了 svn rm'd,但现在我需要再次找到它以将其用于
如何进行 MySQL 搜索,既匹配部分单词,又提供准确的相关性排序? SELECT name, MATCH(name) AGAINST ('math*' IN BOOLEAN MODE) AS rel
我在 postgresql 中创建了一个用于全文搜索的索引。 CREATE INDEX pesquisa_idx ON chamado USING gin(to_tsvector('portugues
我已经设置了一个数据库并启用了全文搜索,当我使用以下内容搜索数据库时,数据库中有一些条目包含“测试”一词,还有一个条目包含“测试更多”: SELECT keywords, title FROM dat
我想知道是否可以进行 MATCH() AGAINST()(全文)搜索,使得不直接相邻的单词需要按特定顺序排列?在我的网站上,当用户在双引号之间键入单词时,搜索将仅显示具有特定顺序的这些单词的结果。例如
我有一个 80,000 行的数据库,当我测试一些 FULLTEXT 查询时,我遇到了一个意想不到的结果。我已从 MYSQL 中删除停用词并将最小字长设置为 3。 当我执行此查询时: SELECT `s
我刚刚在我的 MYSQL 数据库中发现了一堆流氓数据... 到达它的唯一方法是通过其中一列 - FILE_PATH,其中包含文件路径的斜杠剥离版本。我需要在这组文件中找到一些恶意文件——它们的文件名都
我正在为我的站点构建一个小的搜索功能。我正在接受用户的查询,提取关键字,然后针对提取的关键字运行全文 MySQL 搜索。 问题在于 MySQL 将词干视为文字。这是正在发生的过程: 用户搜索“棒球”之
这是一个关于使用(关系)数据库设计全文搜索的系统架构问题。我使用的具体软件是 Solr 和 PostgreSQL,仅供引用。 假设我们正在构建一个有两个用户 Andy 和 Betty 的论坛 -- P
当元素数组中的数组包含应与我的搜索匹配的文本时,我无法检索文档。 这里有两个示例文档: { _id: ..., 'foo': [ { 'name
我正在使用这个查询,但不幸的是它运行缓慢: SELECT *, (MATCH(`title`) AGAINST ('$word' IN BOOLEAN MODE) * 2 + MATC
我正在构建一个非常简单的产品目录,它将在 mysql 表中存储产品,我想尽快搜索产品(并尽可能相关)。产品数据库将非常大(大约 500.000 个产品),这就是为什么使用“like”而不使用索引的搜索
select count(distinct email_address) from users WHERE MATCH (email_address) AGAINST ('@r
我正在尝试在 mySQL 中进行简单的全文搜索,但在复数方面遇到一些问题。 我确实相信我符合50% 规则。 我不认为我使用了停用词。 我正在运行这样的查询: SELECT * FROM product
我在 innoDB 数据库中使用全文搜索时遇到了一个大问题。 首先,ns_pages 表有超过 2.6m 的记录,全文索引有 3 个键 block 。 该数据库在具有 128GB RAM 的 Dell
我有一个城市和州的数据库(大约 43,000 个)。我对其进行全文搜索,如下所示: select city, state, match(city, state_short, state) agains
我正在使用带有自然语言全文的 Mysql FULLTEXT 搜索,不幸的是,我遇到了 FULLTEXT 50% 阈值,如果给定的关键字出现在总行数的 50% 时间,则不允许我搜索行。 我搜索并找到了一
如果我搜索单词hello,那么我没有匹配到,而我搜索单词hella,那么我得到了匹配。同样的情况也发生在“Non”这个词上。我在 Mac 上的 MAMP 和 sqlfiddle.com 上进行了测试,
所以我有一个简单的场景。我有一张 field 表(事件 field 等)。我的查询看起来像: SELECT * FROM venues WHERE venues.name % 'Philips Are
我有一个表,其中有视频数据,如“标题”、“描述”等。我正在尝试使用 MySQL 全文索引编写一个搜索引擎。 SQL 查询适用于某些单词,但不是每个单词。这是我的 SQL 查询; SELECT * FR
我是一名优秀的程序员,十分优秀!