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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
ACCESS クエリーでソートの不具合
-
既存データをINSERT文にして出...
-
データ無し時は空白行にしたい...
-
Access特定のテーブルを編集不...
-
Accessの構成をコピーしたい
-
ExcelのMatch関数のようなもの...
-
複数のテーブルからデータを取...
-
テーブル名が可変の場合のクエ...
-
結合したテーブルをSUMしたい
-
SQLサーバに対するSQL文で抽出...
-
ACCESSのVBAにてExcelに行...
-
DB2のSQLコマンドについて
-
「都道府県の面積の大きい順に...
-
SQLで、Join句で結合したテ...
-
sennaの全文検索のクエリについて
-
2つのテーブルをLIKE演算子のよ...
-
テーブルデータの上書きをした...
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
既存データをINSERT文にして出...
-
テーブル名が可変の場合のクエ...
-
SQLで、Join句で結合したテ...
-
2つのテーブルをLIKE演算子のよ...
-
結合したテーブルをSUMしたい
-
データ無し時は空白行にしたい...
-
ACCESS クエリーでソートの不具合
-
ADO+ODBCでテーブルに接続する...
-
Accessの構成をコピーしたい
-
「総降水量が100mm以上になる...
-
あってますか?SQL
-
ExcelのVLOOKUP関数の動作をMyS...
-
パススルークエリ&ACCESSテーブ...
-
SQLサーバに対するSQL文で抽出...
-
PRIMARY KEYのコピー
-
ExcelのMatch関数のようなもの...
-
Access 別のDBに対してDlookup...
-
同一テーブル内での比較(最新...
-
Access特定のテーブルを編集不...
おすすめ情報