Kouhei Sutou
kou****@clear*****
2016年 3月 31日 (木) 23:51:54 JST
須藤です。 In <JD201****@rozet*****> "[groonga-dev,03998] Re: FULLTEXT検索は、大文字と小文字の区別ができる?" on Thu, 31 Mar 2016 18:59:28 +0900, m-dob****@rozet***** wrote: >> 実際に試したSQL(CREATE TABLE, INSERT, SELECT)とその結果を >> 教えてもらえませんか?こちらでも確認したいです。 > > 下記の通りになります。 ありがとうございます。 > SELECT * FROM test.taiyaku_data_3` WHERE Match(EN_TEXT_JUNKANZEN_ICCHI) > against > ('\"" Be worth "\"' in boolean mode) LIMIT 1; これが問題です。スキーマは問題ありません。 ('+"Be worth"' in boolean mode) としてください。 ('\"" Be worth "\"' in boolean mode) は * 「""」(ダブルクォート2つ) * 「Be」 * 「worth」 * 「""」(ダブルクォート2つ) の「どれか1つ」にマッチしたら全体がマッチする、というクエリー です。 間違いポイントは2つです。 1. ダブルクォートのエスケープを間違っている 2. 明示的にAND検索にしていない 1.はそのとおりです。 SELECT '\"" Be worth "\"'; としてMySQLにどのように評価されるか確認するのがよいと思いま す。 mysql> SELECT '\"" Be worth "\"'; +----------------+ | "" Be worth "" | +----------------+ | "" Be worth "" | +----------------+ 2.は、MySQLの全文検索はデフォルトでOR検索なのでMroongaでもデ フォルトでOR検索になるようにしています。 ('+"Be worth"' in boolean mode) というようにキーワード(あるいはフレーズ)の先頭に「+」をつ けて明示的にAND検索になるようにしてください。 キーワード(あるいはフレーズ)が1つのときはあってもなくても 挙動は変わりませんが、2つ以上になると挙動がかわるのでいつで もつけておくのがよいと思います。 あるいは次のように「D+」プラグマを使ってください。 ('*D+ "Be worth"' in boolean mode) http://mroonga.org/ja/docs/reference/full_text_search/boolean_mode.html#boolean-mode-pragma-d-plus -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaベースの全文検索システムを総合サポート: http://groonga.org/ja/support/ パッチ採用 - プログラミングが楽しい人向けの採用プロセス: http://www.clear-code.com/recruitment/ リーダブルコードワークショップ: http://www.clear-code.com/services/code-reader/readable-code-workshop.html