gpt4 book ai didi

MySQL 全文搜索 一对多

转载 作者:行者123 更新时间:2023-11-30 01:36:10 27 4
gpt4 key购买 nike

问题:我需要对具有多行(一对多)的字段进行全文搜索。


我有这些架构:

公司(1500万+++)

-id

-公司名称


类别

-公司ID

-类别名称(带全文索引)


示例数据:

公司

id |公司名称

1 |公司A

类别

公司ID |类别名称

1 |银行业1 |金融


目标:我需要通过使用 bool 模式和精确匹配来获取所有提供“银行金融”的公司。

下面的查询不会有结果,因为“banking”和“finance”位于不同的行上:

SELECT c.companyname FROM Company c
INNER JOIN Categoy cat ON c.id = cat.companyid
WHERE MATCH (categoryname) AGAINST ('+Banking +Finance' IN BOOLEAN MODE)
LIMIT 100


我的解决方案:我重组了架构,添加了一个名为“Categories”的新表,其中包含“Category”中的所有串联类别(带有全文索引),当然还有一个 companyid。这完成了工作,这是我能想到的最好/最有效的方法。

我已经尝试过不同的方法,例如:- group_concat + 喜欢- 联合+全文

我仍然想知道是否有比我的解决方案更好的方法?

最佳答案

这可能有效。您可以使用having 子句来计算每个单词匹配的次数。它将仅显示每个单词至少有一个匹配项的单词。

SELECT c.companyname 

FROM Company c
INNER JOIN Categoy cat ON c.id = cat.companyid

GROUP BY c.id

HAVING SUM(CASE WHEN MATCH (categoryname) AGAINST ('+Banking' IN BOOLEAN MODE) THEN 1 ELSE 0 END) > 1
AND
SUM(CASE WHEN MATCH (categoryname) AGAINST ('+Finance' IN BOOLEAN MODE) THEN 1 ELSE 0 END) > 1

LIMIT 100

关于MySQL 全文搜索 一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16857662/

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