MySQL的全文搜索功能只有很少的用户可调参数。如果您有一个MySQL源代码发行版,您可以对全文搜索行为施加更多的控制,因为有些更改需要修改源代码。看到第2.9节,“从源代码安装MySQL”.
全文搜索的有效性经过了仔细的调整。在大多数情况下,修改默认行为实际上会降低效率。不要更改MySQL源代码,除非你知道你在做什么.
本节中描述的大多数全文变量都必须在服务器启动时设置。更改它们需要重新启动服务器;在服务器运行时不能修改它们。
有些变量更改需要重新构建全文
表中的索引。本节后面将给出这样做的说明。
要索引的单词的最小长度和最大长度由innodb_ft_min_token_size
而且innodb_ft_max_token_size
为InnoDB
搜索索引,ft_min_word_len
而且ft_max_word_len
为MyISAM
的人。
最小字长和最大字长全文参数不适用于全文
使用ngram解析器创建的索引。Ngram令牌大小由ngram_token_size
选择。
更改任何这些选项后,重建您的全文
使更改生效的索引。例如,要使两个字符的单词可搜索,你可以在一个选项文件中放入以下行:
(mysqld) innodb_ft_min_token_size = 2 ft_min_word_len = 2
然后重新启动服务器并重建您的全文
索引。为MyISAM
表格,请注意有关的备注myisamchk在重建的说明中MyISAM
全文索引。
为MyISAM
搜索索引,自然语言搜索的50%阈值是由所选择的特定加权方案确定的。要禁用它,请在存储/ myisam / ftdefs.h
:
#定义GWS_IN_USE GWS_PROB
将这一行更改为:
#定义GWS_IN_USE GWS_FREQ
然后重新编译MySQL。在这种情况下,不需要重新构建索引。
通过这种改变,你严重降低了MySQL提供足够的相关值的能力匹配()
函数。如果你真的需要搜索这样的常见词汇,最好是搜索使用在布尔模式
相反,它没有观察50%的阈值。
将用于布尔全文搜索的操作符更改为MyISAM
表、设置ft_boolean_syntax
系统变量。(InnoDB
没有相应的设置。)可以在服务器运行时更改这个变量,但是您必须有足够的权限来设置全局系统变量(请参见第5.1.9.1节,“系统变量权限”).在这种情况下,不需要重新构建索引。
对于内置全文解析器,可以通过几种方式更改被认为是单词字符的字符集,如下面的列表中所述。进行修改后,为包含any的每个表重新构建索引全文
索引。假设您希望将连字符(“-”)视为一个单词字符。使用以下方法之一:
修改MySQL源:在
存储/ innobase /处理/ ha_innodb.cc
(InnoDB
),或者在存储/ myisam / ftdefs.h
(MyISAM
),请在true_word_char ()
而且misc_word_char ()
宏。添加“- - -”
到其中一个宏,然后重新编译MySQL。修改字符集文件:不需要重新编译。的
true_word_char ()
宏使用”字符类型”表格,以区分字母和数字与其他字符。控件的内容可以编辑< ctype > < >地图
数组中指定的一个字符集XML文件“- - -”
是一个”信。”然后使用给定的字符集全文
索引。有关< ctype > < >地图
数组的格式,请参阅第10.13.1节,"字符定义数组".为索引列使用的字符集添加新的排序规则,并更改列以使用该排序规则。有关添加排序规则的一般信息,请参见第10.14节,“向字符集添加排序规则”.有关全文索引的特定示例,请参见第12.10.7节,“为全文索引添加用户定义的排序规则”.
为了使这些变化生效,全文
在修改以下任何一个全文索引变量后必须重新构建索引:innodb_ft_min_token_size
;innodb_ft_max_token_size
;innodb_ft_server_stopword_table
;innodb_ft_user_stopword_table
;innodb_ft_enable_stopword
;ngram_token_size
.修改innodb_ft_min_token_size
,innodb_ft_max_token_size
,或ngram_token_size
需要重新启动服务器。
重建全文
索引的InnoDB
表,使用ALTER TABLE
与指数下降
而且添加索引
删除和重新创建每个索引的选项。
运行优化表
在具有全文索引的表上重新构建全文索引,删除已删除的Document id,并在可能的情况下合并同一个单词的多个条目。
要优化全文索引,请启用innodb_optimize_fulltext_only
和运行优化表
.
设置全局innodb_optimize_fulltext_only=ONmysql>优化表opening_lines+--------------------+----------+----------+----------+ | 表| Op | Msg_type | Msg_text | +--------------------+----------+----------+----------+ | 测试。opening_lines | | |状态优化好 | +--------------------+----------+----------+----------+ 1行集(0.01秒)
为避免对大型表上的全文索引进行长时间的重新构建,可以使用innodb_ft_num_word_optimize
选项分阶段执行优化。的innodb_ft_num_word_optimize
选项定义每次优化的字数优化表
运行。默认设置为2000,这意味着每次优化2000个单词优化表
运行。后续优化表
操作从上一步开始优化表
操作结束。
如果修改影响索引的全文变量(ft_min_word_len
,ft_max_word_len
,或ft_stopword_file
),或者如果更改停止字文件本身,则必须重新构建全文
在进行更改并重新启动服务器之后进行索引。
重建全文
索引的MyISAM
表,做一个就足够了快速
修复操作:
mysql >修理表tbl_name快速;
另外,使用ALTER TABLE
如刚才所描述的。在某些情况下,这可能比修复操作更快。
包含any的每个表全文
索引必须如上所示修复。否则,对表的查询可能会产生不正确的结果,对表的修改会导致服务器认为表已经损坏,需要修复。
如果你使用myisamchk执行修改操作MyISAM
表索引(如修复或分析)全文
控件重建索引默认的除非另有指定,否则用于最小字长、最大字长和停止字文件的全文参数值。这可能导致查询失败。
出现问题是因为只有服务器才知道这些参数。它们不是储存在MyISAM
索引文件。如果修改了服务器使用的最小或最大字长或停止字文件值,要避免此问题,请指定相同的值ft_min_word_len
,ft_max_word_len
,ft_stopword_file
值myisamchk你用来mysqld.例如,如果将最小单词长度设置为3,则可以使用myisamchk是这样的:
myisamchk——恢复——ft_min_word_len = 3tbl_name.MYI
以确保myisamchk服务器对全文参数使用相同的值,将每个参数都放在(mysqld)
而且(myisamchk)
选项文件的Sections:
[mysqld] ft_min_word_len=3 [myisamchk] ft_min_word_len=3
使用的替代方法myisamchk为MyISAM
表索引修改是使用修理表
,分析表
,优化表
,或ALTER TABLE
语句。这些语句由服务器执行,服务器知道要使用的正确的全文参数值。