[groonga-dev,03999] Re: FULLTEXT検索は、大文字と小文字の区別ができる?

Back to archive index

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




groonga-dev メーリングリストの案内
Back to archive index