- ベストアンサー
sennaの全文検索のクエリについて
- sennaの全文検索について質問です。Tritonn(senna+MySQL)を導入しました。
- 次のキーワードをすべて含む:A、B。次のキーワードのいずれかを含む:C、D。次のキーワードを含まない:E、F。
- この検索の結果、AかつBかつ(CもしくはD)を含むデータのうち、EとFを含まないものを抽出します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
全文検索を使う場合のクエリと言う事ですよね? 基本的な論理演算は#1さんが書かれているとおりだと思います。 全文検索にSQLの論理演算ORは禁物なので、ANDだけで揃えてみました。 (最近はそうでもないのかな?) select col1, col2, .... from tbl where match(coltext) against ('+A +B -E -F' in boolean mode) and match(coltext) against ('C D' in boolean mode); 残念ながら、MATCH一発で書くクールな方法は思いつきませんでした。 sennaが2回呼ばれる事、と全文検索内とは言えORになるので、速くはないかも、ですね。 (LIKEのテーブルフルスキャンよりは速いと思いますが) それと、手元にTritonn環境ないので申し訳ありませんが、未検証です。 なのであちこち微妙です。
その他の回答 (1)
- bin-chan
- ベストアンサー率33% (1403/4213)
> このようなクエリはどのように書けばいいのでしょうか。 「MySQLのクエリ」で良いですか? いくつか確認させてください。 > 次のキーワードのいずれかを含む:C、D 両方とも含む場合も対象にして良いですか? 両方とも含む場合も対象として進めます。 > 次のキーワードを含まない:E、F 両方とも含まない場合なのか、どちらか一方でも含むなら対象外なのか? どちらか一方でも含むなら対象外として進めます。 テーブル名「対象テーブル」と列名「Col1」は環境に応じて書き換えてください。 select * from 対象テーブル where (Col1 like '%A%' and Col1 like '%B%') and (Col1 like '%C%' or Col1 like '%D%') and not(Col1 like '%E%' or Col1 like '%F%') でどうでしょう?
お礼
ご回答ありがとうございます。 この論理演算をsennaのクエリ書式で書いていただきたかったのです。
お礼
ご回答ありがとうございます。 まさに知りたかった回答です。 >sennaが2回呼ばれる事、と全文検索内とは言えORになるので、速くはないかも、ですね。 or検索の対象を単一カラムになるようにして、not検索の場合のみ、2回matchを走らせるようにしようと思います。 ありがとうございました。