Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql全文匹配,针对_Mysql - Fatal编程技术网

mysql全文匹配,针对

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')

我正在尝试对字段进行全文搜索,以匹配字符串的特定部分。考虑长字符串保持数组值,如201:::::5193:::6202:::6。分隔数组元素和:::分隔键=>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;`  
表格示例

创建表用户配置文件 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秒。仍然非常慢,这意味着我需要采用某种技术来避免此类查询: