
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で質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(パソコン・周辺機器) フォルダの中を特定のキーワードを含むファイルだけ探したいのに、そのキーワードが含まれてないファイルも 2 2023/04/07 11:56
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- その他(ソフトウェア) 一太郎付属の”全件検索”ツールの不具合 3 2023/07/25 15:03
- その他(コンピューター・テクノロジー) AND検索詳しい方お願いします 3 2023/08/12 19:35
- その他(ブログ) ブログを始めたいと思うのですが、下記のような場合のおすすめブログサービスを教えてください。 収益化な 4 2023/04/10 10:01
- Visual Basic(VBA) WordのVBAについて 5 2023/01/11 14:38
- Excel(エクセル) Excelヘルプの原文を表示する最速の方法(手順)には? 1 2023/08/11 11:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
フォームから入力してテーブル...
-
必要なテーブルの個数について。
-
AccessとSQL Serverの連携について
-
ACCESS クエリーでソートの不具合
-
テーブルの列名を変更したい
-
結合したテーブルをSUMしたい
-
ACCESS2000でのテー...
-
SQLサーバに対するSQL文で抽出...
-
2つのテーブルをLIKE演算子のよ...
-
ACCESSのVBAにてExcelに行...
-
既存データをINSERT文にして出...
-
ExcelのVLOOKUP関数の動作をMyS...
-
SQLで、Join句で結合したテ...
-
ExcelのMatch関数のようなもの...
-
メインデータと最新サブデータ...
-
異なるテーブルの値を比較テー...
-
テーブル名が可変の場合のクエ...
-
フラグをたてるってどういうこ...
-
sqlに記述できない文字
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
SQLで、Join句で結合したテ...
-
Accessの構成をコピーしたい
-
既存データをINSERT文にして出...
-
同一テーブル内での比較(最新...
-
SQLサーバに対するSQL文で抽出...
-
副問合せを使わずにUNIONと同様...
-
結合したテーブルをSUMしたい
-
テーブル名が可変の場合のクエ...
-
PRIMARY KEYのコピー
-
2つのテーブルをLIKE演算子のよ...
-
ACCESSのVBAにてExcelに行...
-
DB2のSQLコマンドについて
-
Excelでしりとりを作る方法
-
ExcelのMatch関数のようなもの...
-
改行を含んだデータのインポート
-
ExcelのVLOOKUP関数の動作をMyS...
-
ADO+ODBCでテーブルに接続する...
-
データ無し時は空白行にしたい...
-
Access特定のテーブルを編集不...
おすすめ情報