问题:我需要对包含多行(一对多)的字段进行全文搜索。
我有这些架构:
公司(1500万+++)
-id
-companyname
分类
-companyid
-categoryname(W / FULLTEXT INDEX)
示例数据:
公司
id |公司名称
1 |公司A
分类
companyid |类别名称
1 |银行业 1 |金融
的目标:
我需要让所有提供“银行融资”但却使用IN BOOLEAN MODE和EXACT MATCH的公司。
由于“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 + like - 联盟+全文
我仍然想知道是否有比我的解决方案更好的方法?
答案 0 :(得分:0)
这可能有用。您可以使用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