2009-07-01 95 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沒有一個!