gpt4 book ai didi

mysql - 根据 "field weight/order"对我的MySQL表进行全文搜索

转载 作者:行者123 更新时间:2023-11-29 00:56:37 25 4
gpt4 key购买 nike

我想在我的 MySQL 表上使用全文搜索,但除此之外,我还想对执行搜索的列暗示某种“权重顺序”。

例如:我将三列命名为 - ChapterCol、TextCol、NoteCol。当我搜索“金融”一词时,它应该返回:在 ChapterCol(和/或 TextCol,NoteCol)中包含这个词的所有行的第一位,然后在 TextCol(和/或 NoteCol)中包含它的所有行最后是所有仅在 NoteCol 中有它的行。

我希望有一个答案...

非常感谢

最佳答案

首先,您需要使用 MyISAM 存储引擎,因为它是 MySQL 中唯一支持 FULLTEXT 索引的存储引擎。

创建 3 个单独的全文索引,每个列一个。

在您的 SELECT 查询中,对 WHERE 子句和 ORDER BY 子句中的 3 列中的每一列执行 MATCH...AGAINST... 这样您就可以获得至少在其中一列中包含搜索词的所有行3 列,并根据包含搜索词的列对它们进行排序。

这是一个例子:

CREATE TABLE IF NOT EXISTS your_table (
ChapterCol TEXT,
TextCol TEXT,
NoteCol TEXT,
FULLTEXT INDEX (ChapterCol),
FULLTEXT INDEX (TextCol),
FULLTEXT INDEX (NoteCol)
) Engine = MyISAM;

-- insert test values
insert into your_table (ChapterCol,TextCol,NoteCol) values ('foo','foo','foo'),
('financial blah blah','foo','foo'),('foo','financial blah blah','foo'),
('foo','foo','financial blah blah'),('financial blah blah','financial blah blah',
'financial blah blah');

-- insert filler
insert into your_table (ChapterCol,TextCol,NoteCol)
values (md5(rand()),md5(rand()),md5(rand())),(md5(rand()),md5(rand()),md5(rand())),
(md5(rand()),md5(rand()),md5(rand())),(md5(rand()),md5(rand()),md5(rand())),
(md5(rand()),md5(rand()),md5(rand())),(md5(rand()),md5(rand()),md5(rand())),
(md5(rand()),md5(rand()),md5(rand())),(md5(rand()),md5(rand()),md5(rand())),
(md5(rand()),md5(rand()),md5(rand())),(md5(rand()),md5(rand()),md5(rand())),
(md5(rand()),md5(rand()),md5(rand())),(md5(rand()),md5(rand()),md5(rand()));

SELECT ChapterCol,TextCol,NoteCol
FROM your_table
WHERE MATCH (ChapterCol) AGAINST ('financial' IN BOOLEAN MODE)
OR MATCH (TextCol) AGAINST ('financial' IN BOOLEAN MODE)
OR MATCH (NoteCol) AGAINST ('financial' IN BOOLEAN MODE)
ORDER BY MATCH (ChapterCol) AGAINST ('financial' IN BOOLEAN MODE) DESC,
MATCH (TextCol) AGAINST ('financial' IN BOOLEAN MODE) DESC,
MATCH (NoteCol) AGAINST ('financial' IN BOOLEAN MODE) DESC;

关于mysql - 根据 "field weight/order"对我的MySQL表进行全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5807760/

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