それはこのようなものだ:MySQLで逆全文検索を行う方法は?デフォルトでは
select * from main_table where match(col1,col2) against('search_item');
しかし、私が取得したいことは、逆の、
は、(例えば、1000年の記録を)私はすべてのsearch_itemを回復してきた、と言っている
main_tableの指定された行と一致するものがどれかを見たいと思っています。
これは実行可能ですか?
それはこのようなものだ:MySQLで逆全文検索を行う方法は?デフォルトでは
select * from main_table where match(col1,col2) against('search_item');
しかし、私が取得したいことは、逆の、
は、(例えば、1000年の記録を)私はすべてのsearch_itemを回復してきた、と言っている
main_tableの指定された行と一致するものがどれかを見たいと思っています。
これは実行可能ですか?
あなたが好きな何かができる:あなたを介して取得するには、巨大なデータセットを持っている場合はかなりくそ遅いことになるだろう
SELECT * FROM search_items WHERE (SELECT col1 FROM main_table WHERE ID = XXX) LIKE CONCAT('%',search_item,'%');
。
速度が問題になる場合は、これを処理するもう1つの方法(確かにもっと複雑ですが)は、すべてのデータをデータベースから取り出し、ternary search tree(トライとも呼ばれます)を構築することです。トライを構築するオーバーヘッドを経ると、入力ストリングとの照合は、ブルートフォース方式に比べて高速です。
これは10カ月遅れだが、後世のためだと分かっている。
select * from main_table where match(col1,col2) against('search_item');
私はあなたのmain_tableは、いくつかのユニークな識別子列これを持っていると仮定するつもりです:私は何を言っていることは、あなたががクエリに一致しませんsearch_itemsテーブル内のすべての行をしたいということだと思います私はunqidを呼び出します。
私の最初の考えは、MINUS演算子を使用することでしたが、MySQLには1つもありませんでした。
いいえ、 'like'は解決策ではありません。全文検索と同じスキーマを使用する必要があります – omg