• 締切済み

mysqlのmatch() against()で検索結果が取得できませ

mysqlのmatch() against()で検索結果が取得できません。 select * from fulltexttable where match( a ) against( '+ほげ' in boolean mode ) で検索結果は0件ですが、 select * from fulltexttable where a like '%ほげ%' だと検索結果は取得できます。 aカラムにはフルテキストインデックスは貼ってあります。 mysqlのバージョンは5.0.77 hogeテーブルはMyISAM どなたか助けてください。

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

みんなの回答

  • hardgeek
  • ベストアンサー率50% (7/14)
回答No.2

short answerはft_min_word_lenを変更(デフォルトは3文字)することですね。long answerは語り尽くせないのでマニュアルを読みましょう。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

全文検索についてどこまで理解しているかによりますが、 まず端的に短すぎる文字は全文検索の対象外ですね http://dev.mysql.com/doc/refman/5.1/ja/fulltext-search.html

takubou05
質問者

補足

ft_min_word_len=1をすでに設定済みです。

関連するQ&A

  • MySQLで全文検索について

    MySQLで全文検索を行いたく、色々と調べ、試行錯誤をしたのですが どうしてもできないので、mysqlでの全文検索のやり方がわかるかたがいらっしゃいましたら お教え願えますでしょうか。 私がやったこと 0。Mysqlのバージョン 5.5.23をインスコ  my.confにft_min_word_len=1を追加 mysql再起動 1。MyISAM型のbookテーブルを作成(utf8_general_ciでとりあえず idとsearch_wordsという2カラムのみ idをprimaryに設定) 2。検索対象であるsearch_wordsをFulltext型に変換   sql> alter table book add fulltext( search_words ); 3。データを登録   insert into book (id, search_word) value (1, '夏目漱石 こころ natsume souseki kokoro BOOK-NO-012 時は明治末期。夏休みに鎌倉へ旅行をしていた「私」は鎌倉に来ていた「先生」と出会い交流を始め東京に帰った後も先生の家に出入りするようになる。先生は奥さんと静かに暮らしていた。先生は私に何度も謎めいた、そして教訓めいたことを言う。私は、先生に過去を打ち明けるように迫ったところ来るべき時に過去を話すことを約束した。'); 4。mecabで分かち書きした、「夏目」「漱石」をスペースで区切った文字で検索   っがしかし、検索結果が帰ってこない 実行してみたSQL   select * from book where match( search_word ) against( '夏目 漱石' IN BOOLEAN MODE);   select * from book where match( search_word ) against( '+夏目 +漱石' IN BOOLEAN MODE);   select * from book where match( search_word ) against( '"夏目 漱石"' IN BOOLEAN MODE);   select * from book where match( search_word ) against( '"+夏目 +漱石"' IN BOOLEAN MODE);   select * from book where match( search_word ) against( '"+夏目 +漱石"' IN BOOLEAN MODE);   select * from book where match( search_word ) against( '"*夏目 *漱石"' IN BOOLEAN MODE);   select * from book where match( search_word ) against( '"*夏目* *漱石*"' IN BOOLEAN MODE);   「夏目漱石」とひとくくりにした文字列で検索すると、レコードが帰ってきます    また、against( 'natsume souseki' IN BOOLEAN MODE); も帰ってきます 実際にやってみたいことは、上記の文章で「先生」「鎌倉」「私」「夏目」の4語で検索すると 上記のレコードが帰ってくるということがやりたいですのですが、 select * from book where match( search_word ) against( '夏目 先生 鎌倉 私' IN BOOLEAN MODE); のSQLや対象文字列に+や*を付けたものを実行しても引っかかりませんでした。 私が行った設定/sqlに不備がございましたらご指摘/ご指導いただけませんでしょうか。 よろしくお願いいたします。

  • mysql 全文検索で引っかからないワードがある

    mysqlのfulltextを使用した全文検索で引っかからないワードがあって困っています。 例えば、keywordsテーブルにwordsカラムに以下のレコードがあったとします。 -------------- ジェフ トム ram -------------- このとき、下記のsqlを発行してもジェフやramが引っかかりません。 SELECT * FROM `keywords` WHERE MATCH(words) AGAINST('ジェ*' IN BOOLEAN MODE); SELECT * FROM `keywords` WHERE MATCH(words) AGAINST('ram*' IN BOOLEAN MODE); (※以下は引っかかる SELECT * FROM `keywords` WHERE MATCH(words) AGAINST('トム*' IN BOOLEAN MODE); ) もちろん、カラム定義には、alter table keywords add fulltext(words)をしています。 またFull-Text Stopwordsもデフォルトのままです。 どんな原因があるか分かる方いらっしゃいますでしょうか? 以上、よろしくお願い致します。

  • MATCHとBETWEENを併用したい

    namesテーブルのcontentsカラムにねこを含むレコードのうち、 現在までに書き込まれたものを新しいものから抽出したいと思います。 contentsはverchar(255)、unixtimeはint(11)です。 しかし、 SELECT * FROM names WHERE MATCH (contents) AGAINST ('+ねこ' IN BOOLEAN MODE) AND BETWEEN unixtime < 1360850220 ORDER BY `unixtime` DESC limit 1,50 ; が出力されません。 このSQL文はどこが間違っているのか、ご指摘ください。 SELECT * FROM names WHERE MATCH (contents) AGAINST ('+ねこ' IN BOOLEAN MODE) ORDER BY `unixtime` DESC limit 1,50 ; だと出力されるので AND BETWEEN unixtime < 1360850220 が怪しいと思うのですが、どう訂正したらいいのかわかりませんでした。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLにおける検索結果

    Windows2000のIISでMySQLをインストールしました。 インストール自体はうまくいき、 また、ODBCを入れてAccessから接続もできるようにしました。 ところが、このAccessから検索をしたところ、 検索結果がおかしいのです。 【環境】 Windows2000 IIS MySQL Ver.3.23.38 Access2000 【検索SQL】 Select * from table where name like 'て% 【結果】 name ----- ゆきたに ゆら 上記のように「name」の上1文字が「て」で 始まるデータとしたはずなのに、「ゆ」で始まるデータが 出てきてしまいました。 同じく上1文字が「と」で始まるデータで検索をしても、 同じ結果が出ています。 念のため、likeではなく、Left(name,2) = 'て'又は'と'で 検索もしましたが、同じ結果でした。 何が悪いのでしょうか? よろしくお願いします。

  • MySQLで検索されたフィールド

    いつもお世話になっております。 MySQLで以下のようなSQL文を発行しています。 select * from table where (INSTR(`table`.`name`,'キーワード')<>0 OR INSTR(`table`.`keyword`,'キーワード')<>0) nameカラムとkeywordカラムのどちらのカラムから検索されたのか知りたいのですが どのようにしたらよろしいでしょうか。 (「キーワード」文字列がどちらのカラムに入っているのか知りたいです。) [環境]  MySQL:5.5.16 よろしくご教示お願いいたします。

    • ベストアンサー
    • MySQL
  • MYSQL バイナリーデータに変換して取得

    MYSQLでSELECTして以下のテーブルのCODEカラムからバイナリーデータに変換してデータを取得したいのですが、どうしたら良いでしょうか? SELECT CODE FROM TABLE_NEME WHERE ID='XXX' <テーブルデータ> CODE(varchar型) 011A00046D0ADC4B

    • ベストアンサー
    • MySQL
  • mysql結果を使ってもう1度mysql検索

    DB(mysql)とプログラムが以下のようにあります。 <?php /////////////////テーブルAを検索//////////////////////// $db = mysql_connect("***","***","***"); mysql_select_db("*****",$db); $result = mysql_query("select * from tableA where day = 0601",$db); if ($myrow = mysql_fetch_array($result)) { do { printf("<font color=\"blue\">$myrow[name]$myrow[day]</font><br>"); } while ($myrow = mysql_fetch_array($result)); } else { echo ""; } ////////結果を使ってテーブルAをもう1度検索///////////// $db = mysql_connect("***","***","***"); mysql_select_db("*****",$db); $result = mysql_query("select * from tableA where sports = '$myrow[day]'",$db); if ($myrow = mysql_fetch_array($result)) { do { printf("<font color=\"green\">$myrow[mise]$myrow[name]</font><br>"); } while ($myrow = mysql_fetch_array($result)); } else { echo ""; } ?> テーブルA name | day | sports | A君 | 0511 | バスケット | A君 | 0601 | サッカー | B君 | 0601 | テニス | B君 | 0503 | 水泳 | C君 | 0602 | 競歩 | C君 | 0512 | 乗馬 | dayが0601のA君とB君のsports全部を結果として表示したいのですが、エラーが出たりして思ったようにはできませんでした。 $resultなどが重複してしまうらしいのです。 A君 「バスケット・サッカー」 B君 「テニス・水泳」 と、するにはどうすればいいのでしょうか?よろしくお願いしますm(_ _)m

    • 締切済み
    • PHP
  • MYSQLで複数の値を検索して取得するには?

    お世話になります。 MYSQLとPHPを見よう見まねでやっている超初心者です。 $_POST['sample']はチェックボックスから取得してきたので複数の値があります。 その複数の値をwhere data = $where";にしてdataから複数の検索結果を取得したいと思っているのですが、下記のように書くと複数ある$_POST['sample']の一つしか検索取得できません。 $_POST['sample']の複数の値の検索結果を取得するにはどうすればよろしいのでしょうか? 基本的な事がわかっていない超初心者ですので できれば具体的な式を教えて頂ければ大変助かります。 ご教授よろしくお願い致します。 if (isset($_POST['sample'])) { for ($i = 0; $i < count($_POST['sample']); $i++) { $where ='' . h($_POST['sample'][$i]) . ''; } } function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ///// $sql = "select * from test where data = $where"; $result = mysql_query( $sql );

    • ベストアンサー
    • PHP
  • mysqlのselectについて

    mysqlのselectについて selectがおかしいです。 select * from hoge where a = 'あ'; とすると、 |"あ" |"hoge" | null | |"あ" |"hohi" | null | ... って感じで出力されるはずなんですが、  | |"hoge" | null |  | |"hohi" | null | ... って感じで"あ"のとこが押しつぶされて出力されてしまいます。 何がどうなってるんでしょうか...? 文字コードはsjisで、あってるはずなんですがなんか動きません

    • ベストアンサー
    • MySQL
  • jspでMysql検索で困っています。

    jspでMysql検索で困っています、 コマンド画面で下記の入力をすると条件の検索が出来ます。 select * from kanagawa where fish like '%コイ%'; (8件中検索されるのは1件でそれが表示されます) jspで命令すると、違う結果が返されてきます。 String sql; sql="select * from kanagawa where fish like '%コイ%'"; ResultSet rs=db.executeQuery(sql); 最初は変数でテーブル名等受け取っていたのですがうまくいかなかったので直接検索文を入れたのですが結果は同じく違う物が検索されてしまいます。(fishのフィールド8件中5件が結果としてでます。) 何を調べても間違いなさそうですが・・ どうにもならず困っています、助けてください、お願いします。