[groonga-dev,04557] Re: 演算子&@~ 使用時の""内のスペースの挙動について

Back to archive index

Kouhei Sutou kou****@clear*****
2017年 12月 20日 (水) 11:18:47 JST


須藤です。

In <03295****@MP-MS*****>
  "[groonga-dev,04556] 演算子&@~ 使用時の""内のスペースの挙動について" on Tue, 19 Dec 2017 06:28:20 +0000,
  <satou****@nttda*****> wrote:

> 検索用SQLでは、"te st"をしているため、teとstの間に半角スペースが入っているもののみが指定されることを期待しています。
> しかし、結果は半角スペースが入っていないもの(test.xlsx)もヒットしています。
> これは、仕様なのでしょうか。

はい、仕様です。
「&@~ '"te st"'」はフレーズ検索なのですが、このフレーズ検索
は「te」のあとに連続して「st」が出現する、という意味になりま
す。半角スペースも含んで「te st」が出現する、という意味では
ないのです。

期待する挙動にする方法ですが、

CREATE INDEX xxx
  ON sample.sample
  USING pgroonga(file_name)
  WITH (tokenizer='TokenBigramSplitSymbolAlphaDigit',
        normalizer='none');

というようにnormalizer='none'を指定してください。
これで、文字の正規化機能が無効になり、トークナイザーが半角ス
ペースを認識できなくなるので、半角スペースも他の文字と同じ扱
いになります。つまり、半角スペースも含んで「te st」を検索す
ることになります。

ただ、正規化機能が無効になるので、「Te st」のように大文字小
文字が違うとヒットしなくなります。


正規化はしたい、という場合の別案は、次のリリースで入る予定の
pgroonga_normalize()関数を組み合わせるというものがあります。

CREATE INDEX xxx
  ON sample.sample
  USING pgroonga(pgroonga_normalize(file_name))
  WITH (tokenizer='TokenBigramSplitSymbolAlphaDigit',
        normalizer='none');

として、

select * from sample.sample
  where pgroonga_normalize(file_name) &@~(('"te st"'))

と検索します。

これで「Te st」でもヒットします。


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
OSS開発支援サービス:
  http://www.clear-code.com/blog/2016/6/27.html




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