2009-07-01 61 views
1

默认情况下是这样的:如何在MySQL中进行反向全文搜索?

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

但我要取的是相反的,

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

我想看看它们中的哪些与main_table中的指定行相匹配。

这样可行吗?

回答

1

你可以这样做:

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

这是怎么回事,如果你有一个庞大的数据集,以打通是相当不错的慢。

如果速度是一个问题,处理这个问题的另一种方式(尽管承认更加复杂)是从数据库中获取所有数据并构建一个ternary search tree(也称为trie)。一旦你完成了构建trie的开销,与强制方法相比,匹配输入字符串闪电般快速。

+0

不,`like`不是解决方案,我需要使用与全文搜索相同的模式来完成 – omg 2009-07-02 00:04:59

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没有一个!