繁体   English   中英

MySQL全文搜索多行

[英]MySQL fulltext search over multiple rows

我有一个名为essays的表,该表与一个称为paragraphs的表具有1-to-M关系。 因此, paragraphs表具有指向essay外键。

我当前遇到的问题是,如果进行搜索,MySQL将查看每个单独的段落,但不知道多个段落可以指向同一本书。

我的全文搜索如下:

SELECT DISTINCT *, 
 MATCH(essays.title) AGAINST('my search') as tscore,
 MATCH(paragraphs.content) AGAINST('my search') as cscore
FROM essays 
INNER JOIN paragraphs ON paragraphs.essay_id = essays.id
WHERE 
 MATCH(essays.title) AGAINST('my search')
 OR MATCH(paragraphs.content) AGAINST('my search')
ORDER BY (3 * tscore + cscore) DESC

有没有一种方法可以使MySQL在论文的所有段落中搜索某些东西,然后只返回该论文?

这样的事情对您有用吗?

SELECT essays.id, essays.title,
   MATCH(essays.title) AGAINST('my search') as tscore,
   MATCH(paragraphs.content) AGAINST('my search') as cscore
FROM essays 
   INNER JOIN paragraphs ON paragraphs.essay_id = essays.id
GROUP BY essays.id
   HAVING tscore > 0 OR cscore > 0
ORDER BY (3 * tscore + cscore) DESC;

您还可以使用WHERE子句代替HAVING,但是您需要:

SELECT essays.id, essays.title,
   MATCH(essays.title) AGAINST('my search') as tscore,
   MATCH(paragraphs.content) AGAINST('my search') as cscore
FROM essays 
   INNER JOIN paragraphs ON paragraphs.essay_id = essays.id
WHERE 
   MATCH(essays.title) AGAINST('my search')
   OR MATCH(paragraphs.content) AGAINST('my search')
GROUP BY essays.id
ORDER BY (3 * tscore + cscore) DESC;

请注意,使用GROUP BY时不应使用SELECT * ,因为可能会弹出不必要的聚合问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM