sennaの全文検索のクエリについて

このQ&Aのポイント
  • sennaの全文検索について質問です。Tritonn(senna+MySQL)を導入しました。
  • 次のキーワードをすべて含む:A、B。次のキーワードのいずれかを含む:C、D。次のキーワードを含まない:E、F。
  • この検索の結果、AかつBかつ(CもしくはD)を含むデータのうち、EとFを含まないものを抽出します。
回答を見る
  • ベストアンサー

sennaの全文検索のクエリについて

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単体でしたら書くことができますが、これらの複合文は文例がなかったのでわかりませんでした。 よろしくお願いします。

  • MySQL
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答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環境ないので申し訳ありませんが、未検証です。 なのであちこち微妙です。

spinia0120
質問者

お礼

ご回答ありがとうございます。 まさに知りたかった回答です。 >sennaが2回呼ばれる事、と全文検索内とは言えORになるので、速くはないかも、ですね。 or検索の対象を単一カラムになるようにして、not検索の場合のみ、2回matchを走らせるようにしようと思います。 ありがとうございました。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答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%') でどうでしょう?

spinia0120
質問者

お礼

ご回答ありがとうございます。 この論理演算をsennaのクエリ書式で書いていただきたかったのです。

関連するQ&A

  • MySQLでのあいまい検索について、教えてください。

    MySQLでのあいまい検索について、教えてください。 長いですが、最後までお付き合いください。 今、入っている全データは、以下の通りです。 fieldはnum,nameです。 1 あいうえお 1 かきくけこA 1 さしすせそB 1 たちつてとC 1 まみむめもF 2 あいうえお 2 かきくけこA 2 さしすせそB 3 わおん 3 らりるれろA 3 たちつてとC 3 なにぬねのD 4 かきくけこA 4 はひふへほE 4 まみむめもF 5 Aあいうえお 6 あいAうえお 7 あい A うえお ここから、あいまい検索でnameに「A」を含むものを抽出したいので、 select num, name from ○○ where name like '%A%' order by num; としました。すると出てくるのは、 1 かきくけこA 1 たちつてとC 1 まみむめもF 2 かきくけこA 3 らりるれろA 3 たちつてとC 4 まみむめもF 4 かきくけこA 5 Aあいうえお 6 あいAうえお 7 あい A うえお が出てきてしまいます。「A」が含まれる物は全て出ますが、それ以外の物まで出ます。 また、「C」で同じことをすると、 1 たちつてとC 3 らりるれろA 3 たちつてとC 「E」では、 3 らりるれろA 3 なにぬねのD 4 はひふへほE 「D」でも別の物が出てきます。しかし「B」「F」は正常に出ます。 他にも、ひらがな「に」でやってみても、 3 らりるれろA 3 なにぬねのD と出ます。 なぜ、このようになってしまうのでしょうか? あいまい検索の仕方を間違っているのでしょうか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • ヤフー検索エンジンの検索のやり方(キーワードについて)

    ヤフー検索エンジンの検索のやり方(キーワードについて) A(半角スペース)B(半角スペース)C この場合は、AかつBかつCの意味ですか?それともAまたはBまたはCの意味ですか? もし、半角スペースで区切った時が、デフォルトでAND検索になるならば、 OR検索にするにはどうするんでしょうか? また A(全角スペース)B(全角スペース)C の場合は、半角スペースと違うんですかね?? 上記のことはgoogleでの検索フォームへの入力でも意味は同じですよね? ド素人なこと聞いてすいません・・・

  • エクセル、任意の「行」だけを抽出したい。

    こんなことできますか? A1:F100のセル内にランダムに数字が入っています。 質問1) この中から 1行目→3行目→5行目と一つ飛ばしで入っているデータを抽出してH1:M100の範囲内に表示させるにはどのような操作をすればいいのでしょうか?関数とかで簡単に抽出表示させる技とかあればいいのですが・・・。 A1-B1-C1-D1-E1-F1 A2-B2-C2-D2-E2-F2 A3-B3-C3-D3-E3-F3 A4-B4-C4-D4-E4-F4 A5-B5-C5-D5-E5-F5 A6-B6-C6-D6-E6-F6 A7-B7-C7-D7-E7-F7 ・・・ A100-B100-C100-D100-E100-F100 の中から A1-B1-C1-D1-E1-F1 A3-B3-C3-D3-E3-F3 A5-B5-C5-D5-E5-F5 ・・・ を抽出して H1-I1-J1-K1-L1-M1 ・・・ H100-I100-J100-K100-L100-M100 の範囲内に表示させたいです。 質問2) 同様に、 1行目→4行目→7行目と二つ飛ばしで入っているデータを抽出してO1:T100の範囲内に表示させるにはどのような操作をすればいいのでしょうか?関数とかで簡単に抽出表示させる技とかあればいいのですが・・・。 ※ 説明がわかりにくいかもしれませんが、よろしくお願いします。

  • ファイルメーカーで複数条件データを抽出する方法

    filemaker で、複数条件のデータ抽出を行いたいのですがその方法が分かりません。 フィールドAとフィールドBにそれぞれaまたはb、cまたはdの値が入力される場合、aかつc、aかつd、bかつc、bかつdの件数を求めたいと 考えております。 =Exact(A;"a")and Exact(B;"c")のように入力してみましたがうまくいきませんでした。 知恵をお貸し頂ければ幸いです。 宜しくお願い致します。

  • エクセル 検索した文字含む周辺のものカウント

    初めまして質問させて頂きます。 不備やわかりづらい場合などは、ご質問頂けますと幸いです。 エクセル2003にて以下のような表がございます。 A列      B列 整理番号  アイテム 1           a 1           a 1           b 2           d 2           e 2           a 3           d 3           c 4           a ・           ・ ・           ・ ・           ・ と続いていきます。 やりたいことは、アイテム『a』を検索して、 整理番号が同じものに、何のアイテムが何個あるか?を検索していきたいです。 単体の場合のみ単体と表示されると最高なのですが。 理想は、別シートにaを検索した場合だと A列 B列 単体 1   ※上記だと4のこと a   1 b   1 c   0 d   0 e   1 といった感じです。 アイテムにa~e以外はなく、別シートに一覧で掲載することも可能なのです。 つたない説明なのですが、ご教授願えれば幸いです。 何卒よろしくお願い致します。

  • SEO対策に設定するキーワードの選定に関して

    SEO対策に設定するキーワードの選定に関してですが、 調べるときは、キーワードアドバイスツールなどを使用しています。 質問なのですが、たとえば、「A、B、C、D、E」の5つのキーワードがあったとして、これらすべてをキーワード設定した場合、 そのサイトは、「A B C D E」で検索しないと、ヒットしないのでしょうか? それとも、「A D E」や「A B」みたいな、5つのうちの数個または単数でもヒットするのでしょうか? 「A B C D E」のようにキーワードを増やすと、 →検索結果数は少なくなる→ライバルが少ない でも、それだけの複数のキーワードを入れての検索しかだめなら、デメリット。 「A B」のようにキーワードを絞り込むと、 →検索結果数は多くなる→ライバルが多い でも、少ないキーワード入力なので、有利!? よろしくお願いします。

  • エクセルで計算後の値で検索したい

    教えてください。 たとえば A1セルに1 B1セルに2 C1セルに=A1+B1という数式を入れたら3と表示されます D1に=VLOOKUP(C1,E1:F10,2,FALSE)としたらN/Aとなります E1は1、E2は2、E3は3、E4は4・・・・・・ F1は11、F2は12、F3は13、F4は14・・・・・ C1セルの3という値でE3の3を検索しF3の13を表示させることはできないでしょうか? アドバイスお願いします。

  • Excel 複数セルから文字列の検索、表示

    エクセル初心者です。 過去のものを探しては見ましたが、うまくキーワードを見つけられなかったので 質問させてください。 リストで次のようなものがあるとします。  A   B  C  D  E  F  G 1○ 12 45 - 98 - 2■ - - 12 - 06 3◇ 35 12 01 99 - 4× - - - - 12 5☆ 08 61 20 12 - このリストで各行ごとにB~F列のセルにある「1」で始まる文字列を検索して 該当する文字列をG列に表示する方法はありますでしょうか? 関数とかVBAについては???なので、わかり易くお教え頂けると助かります。 よろしくお願いいたします。

  • エクセルで3つの条件で検索したい場合

    エクセルで3つの条件で検索したい場合、どうすればいいですか? オートフィルター オプション 抽出条件の指定 「  」を含む 「  」を含む で、3つ目の条件を入れる項目がありません。 例えばシートに 列 A B C D E F とあり、 「A」を含む 「B」を含む 「C」を含む という三つの条件で抽出したい場合、どのようにオートフィルター オプションを使えばいいのでしょうか? ▼マークのフィルターをクリックして 外したい項目のチェックボックスを外せば、A,B,Cを抽出できることはわかってますが 今回は例なだけで、実際はもっと複雑なデータなので、 「オートフィルター オプション」「抽出条件の指定」のやり方が知りたいです。

  • エクセル関数について(検索)

    初歩的な質問ですみません。よろしくお願いします 以下のようなデータベースがあるとします。水深1mごとのある値を A01~H01までID番号を付けてデータベース化しています。(水深10mまで) A    B   C  D E F  G  H  I   水深 ID 1    A01 B01 C01 D01 E01 F01 G01 H01 2  1    20 20 20 20 10 20 10 10 3  2 20 20 20 20 10 10 20 10 4  3 20 10 30 10 10 20 30 10 5  4 20 15 10 20 15 30 10 10 6  5 10 20 5 10 20 10 20 20 7  6 15 20 10 10 20 10 10 30 8  7 20 9  8 10 10 9 15 11 10 20 上記のデータベースから以下の選択したIDだけの深度を抽出したいと考えていますがなかなかうまくいきません。     ID 水深m) A01 B01  D01 E01  H01 1    20 20 20 10 10 2 20 20 20 10 10 3 20 10 10 10 10 4 20 15 20 15 10 5 10 20 10 20 20 6 15 20 10 20 30 7 20 8 10 9 15 10 20