Ego*_*gor 5 mysql innodb index full-text-search
我有一个包含一些地址的 MySQL 表。假设我有以下两行:
"10 Fake Street"
"101 Fake Street"
Run Code Online (Sandbox Code Playgroud)
我正在尝试将全文搜索与 MATCH() AGAINST() 一起使用。我已将 ft_min_word_len 设置为 1,重新启动服务器并删除,然后通过运行重建索引
ALTER TABLE addresses DROP INDEX address_index
CREATE FULLTEXT INDEX address_index ON addresses(street)
Run Code Online (Sandbox Code Playgroud)
我已经通过运行验证我的 ft_min_word_len 确实设置为 1
show global variables like 'ft_min_word_len'
Run Code Online (Sandbox Code Playgroud)
如果我在搜索中包含任何少于 3 个字符的单词,则不会返回任何结果,除非我在其中添加了一个野星。例如
SELECT * FROM addresses WHERE MATCH(street) AGAINST('+101' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)
或者
SELECT * FROM addresses WHERE MATCH(street) AGAINST('+10*' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)
两者都返回 1 行“101 Fake Street”。跑步
SELECT * FROM addresses WHERE MATCH(street) AGAINST('+10' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)
返回 0 行。为什么?我可以在网上找到的唯一建议都是关于设置最小长度的,但我已经确认我的设置为 1 并重建了索引。
设置ft_min_word_len只影响 MyISAM。
您需要将innodb_ft_min_token_size设置为 1,因为默认值为 3。
将innodb_ft_min_token_size设置为 1 后,返回并执行
ALTER TABLE addresses DROP INDEX address_index
CREATE FULLTEXT INDEX address_index ON addresses(street);
Run Code Online (Sandbox Code Playgroud)
试一试 !!!
归档时间: |
|
查看次数: |
8090 次 |
最近记录: |