*实际*精确 MySQL 全文搜索
*Actual* exact MySQL fulltext search
所以我在 MySQL 全文中创建精确搜索时遇到了一些困难。
在我的数据库中,我正在尝试查找标题中包含特定关键字的职位。
所以我可能会尝试
WHERE MATCH(jobTitle) AGAINST ('"fs sales"' IN BOOLEAN MODE)
但是,这会找到 "sales"
上的匹配项,而不是 "fs sales"
如何确保 "fs sales"
完全匹配 "fs sales"
而不是 "sales"
?
Table为InnoDB,供参考
你可以像
那样做
select col1, col2 from table_name where text_column like '%fs sales%'
这将 return 所有包含 fs 销售额的记录..
"fs" 可能因为太短而被排除在搜索之外。
检查innodb_ft_min_token_size
的值和手册:https://dev.mysql.com/doc/refman/5.6/en/fulltext-fine-tuning.html
您必须在更改该变量后重建索引。
您的查询应该有效。不过,我的猜测是您没有更改最小字长,因此 "fs" 从未被编入索引。有关这方面的信息,请参阅 here。
其他可能性是文本中还有其他字符,也许是您看不到的字符。
你可以试试这个
select t.*
from (select . . .
WHERE MATCH(jobTitle) AGAINST ('+fs +sales' IN BOOLEAN MODE)
) t
where jobTitle like '%fs sales%';
这只会对匹配的返回集执行 like
。
不过,我最好的猜测是 innodb_ft_min_token_size
设置为其默认值 3,因此 "fs" 未被编入索引。
所以我在 MySQL 全文中创建精确搜索时遇到了一些困难。
在我的数据库中,我正在尝试查找标题中包含特定关键字的职位。
所以我可能会尝试
WHERE MATCH(jobTitle) AGAINST ('"fs sales"' IN BOOLEAN MODE)
但是,这会找到 "sales"
上的匹配项,而不是 "fs sales"
如何确保 "fs sales"
完全匹配 "fs sales"
而不是 "sales"
?
Table为InnoDB,供参考
你可以像
那样做 select col1, col2 from table_name where text_column like '%fs sales%'
这将 return 所有包含 fs 销售额的记录..
"fs" 可能因为太短而被排除在搜索之外。
检查innodb_ft_min_token_size
的值和手册:https://dev.mysql.com/doc/refman/5.6/en/fulltext-fine-tuning.html
您必须在更改该变量后重建索引。
您的查询应该有效。不过,我的猜测是您没有更改最小字长,因此 "fs" 从未被编入索引。有关这方面的信息,请参阅 here。
其他可能性是文本中还有其他字符,也许是您看不到的字符。
你可以试试这个
select t.*
from (select . . .
WHERE MATCH(jobTitle) AGAINST ('+fs +sales' IN BOOLEAN MODE)
) t
where jobTitle like '%fs sales%';
这只会对匹配的返回集执行 like
。
不过,我最好的猜测是 innodb_ft_min_token_size
设置为其默认值 3,因此 "fs" 未被编入索引。