gpt4 book ai didi

带标签的 MySQL 全文 bool 搜索

转载 作者:可可西里 更新时间:2023-11-01 07:05:49 25 4
gpt4 key购买 nike

我以前从未从MYSQL 中搜索过,但我需要实现一个搜索。我有三个表:articlesarticles_tagstags

articles 表包含我要搜索的第一个内容,title 字段。

articles_tags 是一个将 articlestags 关联在一起的数据透视表。 articles_tags 有两个字段,分别是:articles_idtag_id

而且,tags 表包含我要搜索的第二个内容,name 字段。

我的问题是,我需要一种方法来搜索 title 字段,以及与该文章相关的每个标签 (tags.name) 并返回相关性(或按相关性排序)特定文章。

什么是实现它的好方法?我很确定它不能只通过一个查询来完成,所以两个查询,然后将相关性混合在一起,就可以了。

谢谢。

编辑: 忘了说,如果我能给匹配标签更多的权重而不是匹配标题中的单词,那就太棒了。我并不是真的要求任何人写这篇文章,而是给我一些指导。我是 PHP 和 MySQL 的新手。

最佳答案

从@james.c.funk 给出的答案开始,但做了一些修改。

SELECT a.id, a.title, 
MATCH (a.title) AGAINST (?) AS relevance
FROM articles AS a
LEFT OUTER JOIN (articles_tags AS at
JOIN tags AS t ON (t.id = at.tag_id AND t.name = ?))
ON (a.id = at.article_id)
WHERE MATCH (a.title) AGAINST (? IN BOOLEAN MODE)
ORDER BY IF(t.name IS NOT NULL, 1.0, relevance) DESC;

我假设您希望标签匹配匹配完整的字符串,而不是使用全文搜索。

还使用一个左外连接而不是两个,因为如果满足 articles_tags 的连接,那么肯定有一个标签。将标记名称比较放在连接条件中,而不是放在 WHERE 子句中。

bool 模式使 MATCH() 在匹配时返回 1.0,这使得它无法用作相关性度量。因此,在选择列表中进行额外比较以计算相关性。该值介于 0.0 和 1.0 之间。现在我们可以通过将标签视为具有 1.0 的相关性来使标签匹配排序更高。

关于带标签的 MySQL 全文 bool 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1365618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com