我正在尝试对字段进行全文搜索以匹配字符串的特定部分。考虑一个长字符串,保存数组值,如201 ::: 1 ### 193 ::: 5 ### 193 ::: 6 ### 202 ::: 6。 ###分隔一个数组元素和::: seperates key => val。现在我对匹配的理解是它可以在布尔模式下匹配字符串的部分。但是当我按照
的方式做点什么的时候`SELECT
a.settings
, MATCH(a.settings) AGAINST('201:::1') as relevance
, b.maxrelevance
, (MATCH(a.settings) AGAINST('201:::1'))/b.maxrelevance*100 as relevanceperc
FROM
users_profile a
, (SELECT MAX(MATCH(settings) AGAINST('201:::1')) as maxrelevance FROM users_profile LIMIT 1) b
WHERE
MATCH(a.settings) AGAINST('201:::1')
ORDER BY
relevance DESC;`
表格示例
创建表users_profile
(
id
int(11)默认为NULL,
profile
文字,
views
int(11)默认为NULL,
friends_list
文字,
settings
文字,
points
int(11)默认为NULL,
KEY id
(id
),
FULLTEXT KEY settings
(settings
)
)ENGINE = MyISAM DEFAULT CHARSET = utf8;
我的结果为零。欢迎任何想法。
答案 0 :(得分:1)
MySQL全文索引旨在存储自然语言单词。你的样本
201 ::: 1 ### 193 5 ::: ### 193 ::: 6 ### 202 6 :::。 ###
仅由数字作为重要部分组成,例如201,1,192 ...因为非常短的单词很少有用,ft_min_word_len通常设置为4,这意味着没有数字是偶数索引。
Fulltext不是解决此问题的方法。
如果您只想计算表中存在表达式的次数,请使用
(length(a.setting) - length(replace(a.setting,'201:::1',''))) / length('201:::1')