0

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


我有这些架构:

公司(1500 万+++)

-ID

-公司名称


类别

-公司编号

-categoryname(带全文索引)


样本数据:

公司

编号 | 公司名称

1 | A公司

类别

公司ID | 分类名称

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 - union + full text

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

4

1 回答 1

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
于 2013-05-31T12:58:51.390 回答