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