10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

12.10.6微调MySQL全文搜索

MySQL的全文搜索功能只有很少的用户可调参数。如果您有一个MySQL源代码发行版,您可以对全文搜索行为施加更多的控制,因为有些更改需要修改源代码。看到第2.9节,“从源代码安装MySQL”

全文搜索的有效性经过了仔细的调整。在大多数情况下,修改默认行为实际上会降低效率。不要更改MySQL源代码,除非你知道你在做什么

本节中描述的大多数全文变量都必须在服务器启动时设置。更改它们需要重新启动服务器;在服务器运行时不能修改它们。

有些变量更改需要重新构建全文表中的索引。本节后面将给出这样做的说明。

配置最小和最大字长

要索引的单词的最小长度和最大长度由innodb_ft_min_token_size而且innodb_ft_max_token_sizeInnoDB搜索索引,ft_min_word_len而且ft_max_word_lenMyISAM的人。

请注意

最小字长和最大字长全文参数不适用于全文使用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全文索引

为了使这些变化生效,全文在修改以下任何一个全文索引变量后必须重新构建索引:innodb_ft_min_token_sizeinnodb_ft_max_token_sizeinnodb_ft_server_stopword_tableinnodb_ft_user_stopword_tableinnodb_ft_enable_stopwordngram_token_size.修改innodb_ft_min_token_sizeinnodb_ft_max_token_size,或ngram_token_size需要重新启动服务器。

重建全文索引的InnoDB表,使用ALTER TABLE指数下降而且添加索引删除和重新创建每个索引的选项。

优化InnoDB全文索引

运行优化表在具有全文索引的表上重新构建全文索引,删除已删除的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个单词优化表运行。后续优化表操作从上一步开始优化表操作结束。

重建MyISAM全文索引

如果修改影响索引的全文变量(ft_min_word_lenft_max_word_len,或ft_stopword_file),或者如果更改停止字文件本身,则必须重新构建全文在进行更改并重新启动服务器之后进行索引。

重建全文索引的MyISAM表,做一个就足够了快速修复操作:

mysql >修理表tbl_name快速;

另外,使用ALTER TABLE如刚才所描述的。在某些情况下,这可能比修复操作更快。

包含any的每个表全文索引必须如上所示修复。否则,对表的查询可能会产生不正确的结果,对表的修改会导致服务器认为表已经损坏,需要修复。

如果你使用myisamchk执行修改操作MyISAM表索引(如修复或分析)全文控件重建索引默认的除非另有指定,否则用于最小字长、最大字长和停止字文件的全文参数值。这可能导致查询失败。

出现问题是因为只有服务器才知道这些参数。它们不是储存在MyISAM索引文件。如果修改了服务器使用的最小或最大字长或停止字文件值,要避免此问题,请指定相同的值ft_min_word_lenft_max_word_len,ft_stopword_filemyisamchk你用来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

使用的替代方法myisamchkMyISAM表索引修改是使用修理表分析表优化表,或ALTER TABLE语句。这些语句由服务器执行,服务器知道要使用的正确的全文参数值。