[groonga-dev,03649] Re: select文に関して

Back to archive index

Kouhei Sutou kou****@clear*****
2015年 11月 11日 (水) 11:59:35 JST


須藤です。

In <53122****@web30*****>
  "[groonga-dev,03648] Re: select文に関して" on Wed, 11 Nov 2015 10:53:59 +0900 (JST),
  takah****@yahoo***** wrote:

> 下記、ご連絡頂きまして誠に有難う御座いました。
> また、既出である事、大変申し訳御座いませんでした。

大丈夫です!

(だれか、メーリングリストでのやりとりで明らかになった知見を
参照しやすいようにまとめてくれるとうれしいです!)

> ---------------------------------------
> ■修飾子の省略の挙動に関して
> SELECT * FROM mail00.mail
> match(subject) against('ビジネス 最大' IN BOOLEAN MODE)
> 
> 上記はビジネスor最大の論理式で間違い御座いませんでしょうか。
> また('*DOR ビジネス 最大' IN BOOLEAN MODE)と同様の挙動で
> 認識相違御座いませんでしょうか。

はい、その通りです。

ただ、↑の中で「+」を使った場合の挙動はMySQL標準の挙動(*)と
は異なるので注意してください。
(*) http://dev.mysql.com/doc/refman/5.6/ja/fulltext-boolean.html

詳細は↓のスレッドを参照してください。
  https://osdn.jp/projects/groonga/lists/archive/dev/2014-October/002856.html

> ■特殊記号に関して
> 「こんにちは こんばんわ”''()\」という文言に対して
> where match(subject) against('+"()"' IN BOOLEAN MODE)
> と書くと上手く抽出出来ず、抽出方法や
> 特殊記号にあたる文字が何であるかと、
> 確認したく、自分の探し方が悪いのか、
> 上手くリファレンスが探せず、
> 特殊文字の範囲、扱いに関して、
> URLでも構いませんので、ご教示頂ければ幸いで御座います。

これは特殊記号のエスケープはちゃんとできていて、問題は
TokenMecabを使っていることです。

↓というようにmroonga_commandでtable_tokenizeを実行するとど
のようなトークンになるかがわかります。この場合は「''()\\」で
ひとつのトークンになっているため「''()\\」そのものでしかヒッ
トせず、「()」のように中にある一部の文字列ではヒットしません。

----
USE mysql;
DROP TABLE IF EXISTS mail;
SET NAMES utf8mb4;
CREATE TABLE mail (
  subject text,
  FULLTEXT INDEX (subject) COMMENT 'tokenizer "TokenMecab"'
) ENGINE=Mroonga DEFAULT CHARSET utf8mb4;

SELECT mroonga_command('table_tokenize mail-subject "こんにちは こんばんわ”\\\'\\\'\\\(\\\)\\\\" --mode ADD');
-- [
--   {
--     "value": "こんにちは",
--     "position": 0,
--     "force_prefix": false
--   },
--   {
--     "value": "こんばんわ",
--     "position": 1,
--     "force_prefix": false
--   },
--   {
--     "value": "”",
--     "position": 2,
--     "force_prefix": false
--   },
--   {
--     "value": "''()\\\\",
--     "position": 3,
--     "force_prefix": false
--   }
-- ]

あらゆる部分文字列でヒットさせたい場合は前のメールに書いた
TokenRegexpを使ってください。使えるトークナイザーについては
↓を参照してください。
  http://groonga.org/ja/docs/reference/tokenizers.html


なお、特殊記号については↓を参照してください。
  http://groonga.org/ja/docs/reference/grn_expr/query_syntax.html#escape


あと、できればでよいのですが、次からは一部のSQLやSQLの一部で
はなく、こちらでも試せるSQL一式を教えてもらえると助かります。
(SQL一式とはこのメールや前のメールで私が提示しているような
SQLです。)

一部のSQLやSQLの一部だけだとこちらで動作確認をするためにSQL
一式をこちらで作らなければならなくて面倒なのです。。。
たぶん、手元には動作するSQL一式があるはずなので、それを提供し
てもらえればこちらで作りなおさなくてもよくなるのです。。。


-- 
須藤 功平 <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/




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