我有 2 个表,它们有以下列。
articles: id (PK), article (longtext), date (date)
keywords: id (PK), keyword (varchar)
目前我只能这样做,搜索一个硬关键字并显示该单词出现次数最多的文本:
SELECT * , MATCH (article) AGAINST ("keyword*" IN BOOLEAN MODE) AS relevance
FROM `articles`
WHERE MATCH (article) AGAINST ("keyword*" IN BOOLEAN MODE) ORDER BY relevance DESC LIMIT 10
如何搜索每个关键字(表:关键字)在每个文本(表:文章)中出现的次数?
我已经尝试过(我不知道是否可能?),但我得到“反对时的参数无效”:
SELECT keyword
FROM keywords
CROSS JOIN articles
WHERE MATCH (keywords.keyword)
AGAINST (articles.article IN NATURAL LANGUAGE MODE)
<小时/>
编辑戈登·利诺夫:
Table : Keywords
Id Keyword
1 first
2 second
3 text
4 keyword
-
Table : Articles
Id Article
1 the first text
2 the second text
3 text text text
期望的结果:
Keyword score
text 5
first 1
second 1
keyword 0
最佳答案
将关键字存储在分隔字符串中是错误的存储方式。您应该有一个联结/关联表,每篇文章中的每个关键字占一行。
也就是说,有时我们会被其他人的非常非常糟糕的数据模型所困扰。如果这是您的数据模型,您应该花精力修复它而不是使用它。
但是,您可以通过一些字符串操作来做到这一点:
select kw.motcle,
sum( (length(d.articles) -
length(replace(d.articles, mc.motcle, '')
) / length(d.articles)
) as cnt
from test_motcle mc left join
articles a
on fin_in_set(mc.motcle, replace(d.articles, ' ', ',') > 0
group by mc.motcle
order by cnt desc;
关于mysql - 如何搜索关键字在两个表格之间的多个文本中出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56324245/