sennaの全文検索について質問です。
Tritonn(senna+MySQL)を導入しました。
http://qwik.jp/senna/FrontPageJ.html
A、B、C、D、E、Fを日本語の単語とします。
次のキーワードをすべて含む:A、B
次のキーワードのいずれかを含む:C、D
次のキーワードを含まない:E、F
という条件で抽出を行いたいです。
この検索の結果、AかつBかつ(CもしくはD)を含むデータのうち、EとFを含まないものを抽出します。
このようなクエリはどのように書けばいいのでしょうか。
AND、OR、NOT単体でしたら書くことができますが、これらの複合文は文例がなかったのでわかりませんでした。
よろしくお願いします。
No.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環境ないので申し訳ありませんが、未検証です。
なのであちこち微妙です。
ご回答ありがとうございます。
まさに知りたかった回答です。
>sennaが2回呼ばれる事、と全文検索内とは言えORになるので、速くはないかも、ですね。
or検索の対象を単一カラムになるようにして、not検索の場合のみ、2回matchを走らせるようにしようと思います。
ありがとうございました。
No.1
- 回答日時:
> このようなクエリはどのように書けばいいのでしょうか。
「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%')
でどうでしょう?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
PRIMARY KEYのコピー
-
SQLサーバに対するSQL文で抽出...
-
改行を含んだデータのインポート
-
ACCESS クエリーでソートの不具合
-
ADO+ODBCでテーブルに接続する...
-
Access特定のテーブルを編集不...
-
SQLで、Join句で結合したテ...
-
ACCESSのVBAにてExcelに行...
-
テーブル名が可変の場合のクエ...
-
フォームから入力してテーブル...
-
既存データをINSERT文にして出...
-
異なるテーブルの値を比較テー...
-
Accessの構成をコピーしたい
-
MySQL: 複数テーブルのcount
-
2つのテーブルをLIKE演算子のよ...
-
Excelでしりとりを作る方法
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
-
PostgreSQLのtimestamp型で時間...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
既存データをINSERT文にして出...
-
SQLで、Join句で結合したテ...
-
結合したテーブルをSUMしたい
-
テーブル名が可変の場合のクエ...
-
Accessの構成をコピーしたい
-
同一テーブル内での比較(最新...
-
ADO+ODBCでテーブルに接続する...
-
ACCESS クエリーでソートの不具合
-
SQLサーバに対するSQL文で抽出...
-
ACCESSのVBAにてExcelに行...
-
改行を含んだデータのインポート
-
PRIMARY KEYのコピー
-
MySQL: 複数テーブルのcount
-
データ無し時は空白行にしたい...
-
ExcelのVLOOKUP関数の動作をMyS...
-
ExcelのMatch関数のようなもの...
-
2つのテーブルをLIKE演算子のよ...
-
Access特定のテーブルを編集不...
-
Excelでしりとりを作る方法
おすすめ情報