Motoi Washida
wm3****@mail*****
2013年 8月 16日 (金) 02:52:06 JST
鷲田です。 丁寧な説明ありがとうございます。 On H.25/08/15, at 17:53, Kouhei Sutou <kou****@clear*****> wrote: > まず、どういうときにインデックスを使わなくなるかというと、例 > えば否定演算子を使う時です。具体的にいうと、 > > --filter '!true' > > というようなときです。 なるほど、理屈は分かるような気はします。多くの場合、データとフィルタを工夫する事で回避も出来そうですね。 > 次に、どうしてmatch_columnsを使うとヒットしなくなるかです。 (中略) > > インデックスを使うときはここもいい感じに頑張るように作ってあ > りますが、インデックスを使わないときは、grepのように逐次検索 > をしています。このとき、すべてのレコードに対して、それぞれ > 「カラムの値をとってきて、--queryに指定した値を含むか」をチェッ > クします。このとき、match_columnsに指定したすべてのカラムにつ > いて「カラムの値をとってきて、--queryに指定した値を含むか」を > チェックするようにすればインデックスを使わない場合でもそれっ > ぽく動くのですが、今はそこまで作りこんでいません。なぜなら、 > インデックスを使わない検索処理をがんばるよりはインデックスを > 使った検索処理の方に力を入れて高速にしたほうがうれしい場合が > 多からです。また、そっちの方が「高速な全文検索エンジン」とい > うgroongaの大事にしているポイントと合致するからです。 これも方向性として理解できる気がします。 ただ一方で、直感と異なる挙動だとは思うので、違和感がどうしても残ってしまうのと、今回のように意図しない結果が出た場合に原因の特定や切り分けが難しくなってしまうなあ、というのが正直な感想ではあります。 > とすると、インデックスを使っているかどうかはどうやって知れば > いいの?というのが気になるところだと思います。実は、今は知る > 方法はありません。。。速く結果が返ってきたら使っているだろう > なぁというくらいです。groonga.logにどのインデックスを使った、 > みたいなのを出そうと思っているのですが、まだ実装できていませ > ん。。。 期待しております。 m(__)m -- Motoi Washida <wm3****@mail*****>