gpt4 book ai didi

mysql - 跨多个相关表的相关性搜索

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

我有一个名为 cards 的表其中有相关表brigadesidentifiers 。一张卡可以有多个组和标识符。我想进行单一搜索,例如 'purple king'其中“紫色”是一个旅,“国王”是一个标识符,并找到具有这些旅和标识符的卡片。这是对类似问题的回答,https://stackoverflow.com/a/9951200/633513 ,展示了如何跨多个表进行全文搜索。我想做同样的事情,但我只想相关的比赛。这可能吗?

表结构:

Cards: id as INT, title as VARCHAR(50)
Brigades: id as INT, brigade as VARCHAR(50)
Identifier: id as INT, identifier as VARCHAR(50)

连接表:

CardBrigades: id as INT, card_id as INT, brigade_id as INT
CardIdentifiers: id as INT, card_id as INT, identifier_id as INT

示例标识符:

Angel
Animal
Archer
Army
Assyrian
Babylonian
Based on Prophecy
Beast
Bows, Arrows, Spears, Javelins and Darts
Canaanite
'Capture' in Special Ability
'Censer' in Title
Chief Priest
Child of Leah
Commander
Connected to David
Connected to Demons
'Covenant' in Title
'David' in Title
'David' in Verse
Deacon
Prince

示例旅:

None
Black
Brown
Crimson
Gold (Evil)
Gray
Orange
Pale Green
Multi (Evil)
Blue
Gold (Good)
Green
Purple
Red
Silver
Teal
White
Multi (Good)
Multi

最佳答案

根据您发布的链接中的答案,您可以执行类似的操作

SELECT id,SUM(relevance) as total_relevance FROM (
SELECT
id,
(MATCH(title) AGAINST ('search string')) AS relevance
FROM Cards
UNION
SELECT
Cards.id,
(MATCH(brigade) AGAINST ('search string')) AS relevance
FROM Brigades
INNER JOIN CardBrigades ON Brigades.id=brigade_id
INNER JOIN Cards ON card_id=Cards.id
UNION
SELECT
Cards.id,
(MATCH(identifier) AGAINST ('search string')) AS relevance
FROM Identifier
INNER JOIN CardIdentifier ON Identifier.id=identifier_id
INNER JOIN Cards on card_id=Cards.id
) AS combined_search
GROUP BY id
HAVING total_relevance > 0

我不确定这会表现如何。您最好考虑其他解决方案,例如 Solr、Lucene 甚至 NoSQL 存储引擎。

关于mysql - 跨多个相关表的相关性搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9953922/

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