gpt4 book ai didi

mysql - 多对多关系的文本搜索

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

我有三个表:carscolourscars_has_colours,前两个表具有多对多关系。

我想搜索汽车,最好使用 MATCH 和 AGAINST。如果我想搜索cars.name,这很容易实现。

如果可能的话,我想使用 MATCH 和 AGAINST 搜索颜色。这样做的原因是可以将颜色 MATCH 的结果添加到名称等 MATCH 的结果中。

例如,如果我搜索“蓝色”,我希望看到任何“天蓝色”或“海军蓝”的汽车。

理想情况下,我希望使用文本搜索并能够获得某种相关性分数,而不是使用 WHERE/IN,以便在搜索“蓝色”、“天蓝色”和“海军蓝”颜色的汽车时被返回,但名为“bluebird”的汽车也会被返回(尽管它不一定与颜色中的“蓝色”有关系)

我在子查询上尝试过 GROUP_CONCAT,它给了我一个包含所有颜色的字符串,但是我不能将其用作 MATCH 中的参数(奇怪的是,我得到的错误告诉我我有一个无效的参数反对,即使我只是按照文档放入字符串文字)

我希望这是有道理的。

最佳答案

SELECT c.*, cl.colour, 
(MATCH (cl.colour AGAINST ('blue') + MATCH(c.name) AGAINST ('blue')) AS score
FROM cars AS c
LEFT JOIN cars_has_colours AS cc ON cc.car_id = c.id
LEFT JOIN colours AS cl ON cc.colour_id = cl.id AND MATCH(cl.colour) AGAINST ('blue')
WHERE MATCH (c.name) AGAINST ('blue') OR cl.id IS NOT NULL
ORDER BY score DESC

关于mysql - 多对多关系的文本搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30452200/

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