MySQL全文搜索一个是很多

时间:2013-05-31 12:49:02

标签: mysql one-to-many full-text-search fulltext-index

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


我有这些架构:

公司(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 - 联盟+全文

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

1 个答案:

答案 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