mysql全文匹配,针对
我正在尝试对字段进行全文搜索,以匹配字符串的特定部分。考虑长字符串保持数组值,如201:::::5193:::6202:::6。分隔数组元素和:::分隔键=>val。现在我对匹配的理解是,它可以在布尔模式下匹配字符串的部分。但是当我按照mysql全文匹配,针对,mysql,Mysql,我正在尝试对字段进行全文搜索,以匹配字符串的特定部分。考虑长字符串保持数组值,如201:::::5193:::6202:::6。分隔数组元素和:::分隔键=>val。现在我对匹配的理解是,它可以在布尔模式下匹配字符串的部分。但是当我按照 `SELECT a.settings , MATCH(a.settings) AGAINST('201:::1') as relevance , b.maxrelevance , (MATCH(a.settings) AGAINST('201:::1')
`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;`
表格示例
创建表用户配置文件
id int11默认为空,
配置文件文本,
视图int11默认为空,
好友列表文本,
设置文本,
点int11默认为空,
密钥id,
全文键设置
ENGINE=MyISAM默认字符集=utf8
我没有得到任何结果。欢迎任何想法。MySQL全文索引设计用于存储自然语言单词。你的样品 201:::1193:::5193:::6202::6 仅由数字作为有效部分组成,如201、1192。。。因为非常短的单词很少有用,所以通常设置为4,这意味着索引中没有一个数字是偶数 全文不是这个问题的解决办法 如果您只想计算一个表达式在列中存在的次数,只需使用
(length(a.setting) - length(replace(a.setting,'201:::1',''))) / length('201:::1')
请显示表格示例,并标记您不需要选择的字段。我已使用表格结构进行了更新。只需搜索字段设置di think:保留用于布尔搜索。查看:并尝试修改此设置。这可能会有帮助。还可以查看此页面上以ft_uu开头的所有其他设置。即使我的字符串看起来像test12345@@@1--pr@@@2,并且我搜索pr@@@2,我仍然会得到null yes、REGEX或类似的设置,因为只有一个术语。即使它会很慢。问题是,就我正在测试的正则表达式而言,不能给我每行的匹配计数,这是最重要的一点here@Richard又名赛博猕猴桃,好主意。将测试它在速度方面是否符合以下条件,以解决问题。选择SUMa1+a2+a3作为匹配项,id来自SELECT id,CASE WHEN settings REGEXP'201:::1'然后1 ELSE 0结束为a1,CASE WHEN settings REGEXP'193:::5'然后1 ELSE 0结束为a2,CASE WHEN settings REGEXP'192::1'然后1 ELSE 0结束为a3,来自用户\u profile SQ group by id ORDEORDER by by MATCHSDESC@mbouclas/哦,你在数不同的比赛,所以你不能用蓝蓝蓝替换法。仅供参考,在mysql中,当设置REGEXP'201:::1'时,1 ELSE 0 END被写为设置REGEXP'201::1'@Richard aka cyberkiwi,我使用了你的技巧,它工作得很好。事实上,在大容量的情况下,它比我的要快得多。例如,195000行,搜索14个不同的参数,使用你的技巧需要6秒,而我的需要7秒。仍然非常慢,这意味着我需要采用某种技术来避免此类查询: