[groonga-dev,03860] Re: PGROONGAの@@コマンドでの前方一致検索

Back to archive index

高見 直輝 takam****@orega*****
2016年 1月 18日 (月) 15:36:28 JST


高見です。

> > select lower(pathcombine(rootdir::text, path)) as tmp from TEST_TABLE
> >  where
> >    lower(pathcombine(rootdir,path)) LIKE lower('\st\新しいフォルダー\フォルダ%') AND
> >    lower(pathcombine(rootdir,path)) @@ lower('"30"');
> > 
> > で同じ挙動になるんじゃないかと思います。
> 
> 残念ながら、改善しませんでした。
> どうも、LIKE指定が在ると無条件で結果が0件になって居るような感じです。

自己レスになりますが、LIKEを使ったときと%%を使ったときのPGROONGAの
DEBUGログを取得しましたので報告します。
まず、LIKEの前方一致ではなく、部分一致で検索したとき。(結果:0件)
【SQL】
select lower(pathcombine(rootdir::text, path)) as tmp from TEST_TABLE
 where
   lower(pathcombine(rootdir,path)) LIKE lower('%\st\新しいフォルダー\フォルダ%') AND
   lower(pathcombine(rootdir,path)) @@ lower('"30"');
2016-01-18 15:00:24.531000|i| [object][search][index][key][exact] <Lexicon16728_0.index>
2016-01-18 15:00:24.531000|i| grn_ii_sel > (st新しいフォルダーフォルダ)
2016-01-18 15:00:24.531000|i| exact: 0
2016-01-18 15:00:24.531000|i| unsplit: 0
2016-01-18 15:00:24.531000|i| partial: 0
2016-01-18 15:00:24.531000|i| hits=0
2016-01-18 15:00:24.531000|i| [object][search][index][key][exact] <Lexicon16728_0.index>
2016-01-18 15:00:24.531000|i| grn_ii_sel > (30)
2016-01-18 15:00:24.531000|i| n=1 (30)
2016-01-18 15:00:24.531000|i| exact: 0
2016-01-18 15:00:24.531000|i| hits=0

次に、%%で検索したとき。(結果:4712件)
select lower(pathcombine(rootdir::text, path)) as tmp from TEST_TABLE
 where
   lower(pathcombine(rootdir,path)) %% lower('\st\新しいフォルダー\フォルダ') AND
   lower(pathcombine(rootdir,path)) @@ lower('"30"');
2016-01-18 15:03:23.468000|i| [object][search][index][key][exact] <Lexicon16728_0.index>
2016-01-18 15:03:23.468000|i| grn_ii_sel > (\st\新しいフォルダー\フォルダ)
2016-01-18 15:03:23.468000|i| n=16 (\st\新しいフォルダー\フォルダ)
2016-01-18 15:03:23.500000|i| exact: 20342
2016-01-18 15:03:23.500000|i| hits=20342
2016-01-18 15:03:23.500000|i| [object][search][index][key][exact] <Lexicon16728_0.index>
2016-01-18 15:03:23.500000|i| grn_ii_sel > (30)
2016-01-18 15:03:23.500000|i| n=1 (30)
2016-01-18 15:03:23.500000|i| exact: 4712
2016-01-18 15:03:23.500000|i| hits=4712

最後に、LIKE検索で\をエスケープした結果です。(結果:0件)
select lower(pathcombine(rootdir::text, path)) as tmp from TEST_TABLE
 where
   lower(pathcombine(rootdir,path)) LIKE lower('%\\st\\新しいフォルダー\\フォルダ%') AND
   lower(pathcombine(rootdir,path)) @@ lower('"30"');
2016-01-18 15:04:25.734000|i| [object][search][index][key][exact] <Lexicon16728_0.index>
2016-01-18 15:04:25.734000|i| grn_ii_sel > (\st\新しいフォルダー\フォルダ)
2016-01-18 15:04:25.750000|i| n=16 (\st\新しいフォルダー\フォルダ)
2016-01-18 15:04:25.781000|i| exact: 20342
2016-01-18 15:04:25.781000|i| hits=20342
2016-01-18 15:04:25.781000|i| [object][search][index][key][exact] <Lexicon16728_0.index>
2016-01-18 15:04:25.781000|i| grn_ii_sel > (30)
2016-01-18 15:04:25.781000|i| n=1 (30)
2016-01-18 15:04:25.781000|i| exact: 4712
2016-01-18 15:04:25.781000|i| hits=4712

2つ目と3つ目のログが同じに見えるのに、何故結果が異なるのかは不明です。

> 一つ確認なのですが、1.0.1を適用することで状況が改善する可能性はあります
> でしょうか?
> 現在1.0.0で動かしています。

----------------------------- 
高見 直輝 <takam****@orega*****>
株式会社オレガ
TEL:03-3267-0150
FAX:03-3267-0180




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