如何在MySQL中进行反向全文搜索?

时间:2009-07-01 23:16:35

标签: mysql full-text-search

默认情况下,它是这样的:

select * from main_table where match(col1,col2) against('search_item');

但我想要获取的是相反的,

说,我已经恢复了所有search_item(例如1000条记录),

我希望看到哪些匹配main_table中的指定行。

可行吗?

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

SELECT * FROM search_items WHERE (SELECT col1 FROM main_table WHERE ID = XXX) LIKE CONCAT('%',search_item,'%');

如果你有一个巨大的数据集可以通过,那将会非常慢。

如果速度是一个问题,另一种处理这个问题的方法(虽然承认要复杂得多)是从数据库中获取所有数据并自己构建ternary search tree(也称为trie)。一旦你完成了构建trie的开销,与蛮力方法相比,对输入字符串的匹配是快速的。

答案 1 :(得分:0)

我意识到这已经晚了十个月,但仅仅是为了后人。我想你所说的是你想要 search_items 表中匹配查询的所有行:

select * from main_table where match(col1,col2) against('search_item');

我将假设你的main_table有一些我称之为unqid的唯一标识符列。

select * from main_table
WHERE
unqid not in (select unqid 
              from main_table  
              where match(col1,col2) against('search_item')
             )

我的第一个想法是使用MINUS运算符但事实证明MySQL没有运算符!