2009-07-01 6 views
1

それはこのようなものだ:MySQLで逆全文検索を行う方法は?デフォルトでは

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

しかし、私が取得したいことは、逆の、

は、(例えば、1000年の記録を)私はすべてのsearch_itemを回復してきた、と言っている

main_tableの指定された行と一致するものがどれかを見たいと思っています。

これは実行可能ですか?

答えて

1

あなたが好きな何かができる:あなたを介して取得するには、巨大なデータセットを持っている場合はかなりくそ遅いことになるだろう

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

速度が問題になる場合は、これを処理するもう1つの方法(確かにもっと複雑ですが)は、すべてのデータをデータベースから取り出し、ternary search tree(トライとも呼ばれます)を構築することです。トライを構築するオーバーヘッドを経ると、入力ストリングとの照合は、ブルートフォース方式に比べて高速です。

+0

いいえ、 'like'は解決策ではありません。全文検索と同じスキーマを使用する必要があります – omg

0

これは10カ月遅れだが、後世のためだと分かっている。

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

私はあなたのmain_tableは、いくつかのユニークな識別子列これを持っていると仮定するつもりです:私は何を言っていることは、あなたががクエリに一致しませんsearch_itemsテーブル内のすべての行をしたいということだと思います私はunqidを呼び出します。

私の最初の考えは、MINUS演算子を使用することでしたが、MySQLには1つもありませんでした。

関連する問題