如何在MySQL中进行反向全文搜索?
问题描述:
默认情况下是这样的:如何在MySQL中进行反向全文搜索?
select * from main_table where match(col1,col2) against('search_item');
但我要取的是相反的,
说,我已经恢复了所有的SEARCH_ITEM(1000条记录,例如),
我想看看它们中的哪些与main_table中的指定行相匹配。
这样可行吗?
答
你可以这样做:
SELECT * FROM search_items WHERE (SELECT col1 FROM main_table WHERE ID = XXX) LIKE CONCAT('%',search_item,'%');
这是怎么回事,如果你有一个庞大的数据集,以打通是相当不错的慢。
如果速度是一个问题,处理这个问题的另一种方式(尽管承认更加复杂)是从数据库中获取所有数据并构建一个ternary search tree(也称为trie)。一旦你完成了构建trie的开销,与强制方法相比,匹配输入字符串闪电般快速。
答
那么我意识到这是晚了十个月,但只是为了后人。我想你的意思是,你想要的所有行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没有一个!
不,`like`不是解决方案,我需要使用与全文搜索相同的模式来完成 – omg 2009-07-02 00:04:59