gpt4 book ai didi

mysql - 如何跨多个表实现 MySQL 全文搜索?

转载 作者:IT老高 更新时间:2023-10-28 23:52:22 26 4
gpt4 key购买 nike

我正在尝试在三个单独的表格中进行全文搜索,并按相关性对结果进行排序。

在搜索答案的过程中,我发现无法在多个表中使用全文搜索。因此,我为要搜索的每一列添加了单独的全文索引。

现在的问题是我可以进行搜索,但我不能按照我的意愿进行排序。

这是我的 table :

CREATE TABLE books (
bookID int(11) NOT NULL AUTO_INCREMENT,
title varchar(300) NOT NULL,
authorID int(11) NOT NULL,
FULLTEXT KEY title (title)
)

CREATE TABLE IF NOT EXISTS authors (
authorID int(11) NOT NULL AUTO_INCREMENT,
authorNamevarchar(200) NOT NULL,
FULLTEXT KEY authorName(authorName)
);

CREATE TABLE IF NOT EXISTS chapters (
chapterID int(11) NOT NULL AUTO_INCREMENT,
bookID int(11) NOT NULL,
content longtext NOT NULL,
FULLTEXT KEY content (content)
);

这是我卡住的 MySQL 查询:

SELECT *, 
MATCH(books.title) AGAINST('$q') as tscore,
MATCH(authors.authorName) AGAINST('$q') as ascore
MATCH(chapters.content) AGAINST('$q') as cscore
FROM books
LEFT JOIN authors ON books.authorID = authors.authorID
LEFT JOIN chapters ON books.bookID = chapters.bookID
WHERE
MATCH(books.title) AGAINST('$q')
OR MATCH(authors.authorName) AGAINST('$q')
OR MATCH(chapters.content) AGAINST('$q')
ORDER BY ???? DESC

现在有了这个查询,我可以按标题、作者或内容进行排序。我想要做的是,将所有三列的相关性放在一起,然后按此对结果进行排序。

而且,是的,我知道其他搜索引擎,例如 Lucene 或 Sphinx,但我现在不打算使用它们。

最佳答案

您应该能够在 ORDER BY 子句中添加 tscoreascorecscore 值.

试试这个:

SELECT *, 
MATCH(books.title) AGAINST('$q') as tscore,
MATCH(authors.authorName) AGAINST('$q') as ascore,
MATCH(chapters.content) AGAINST('$q') as cscore
FROM books
LEFT JOIN authors ON books.authorID = authors.authorID
LEFT JOIN chapters ON books.bookID = chapters.bookID
WHERE
MATCH(books.title) AGAINST('$q')
OR MATCH(authors.authorName) AGAINST('$q')
OR MATCH(chapters.content) AGAINST('$q')
ORDER BY (tscore + ascore + cscore) DESC

关于mysql - 如何跨多个表实现 MySQL 全文搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4226893/

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