Kazuhiko
kazuh****@fdiar*****
2014年 9月 30日 (火) 22:23:33 JST
On 30/09/2014 04:41, Kouhei Sutou wrote: >> それに加えて、'-word'の分のスコアが反映されると思うのですが、以下のスコ >> アの違いの理由がよく分かりません。 > > '-word'のスコアがわかるとドキュメントをまとめられそうという > ことですよね。 > > で、違いがわからないというのは「先頭に-wordがあるとき」と「2 > 番目に-wordがあるとき」の違い、というのであっていますか? > > Groongaでは先頭の「-word」(wordを含まない文書を検索)はサポー > トしていません。これは、非常に重いクエリーになるからです。 > > ただ、Mroongaでは、やんごとなき理由で使いたいことがあるとい > うことで、重いのを受け入れられるなら使えるよ、という位置づけ > で先頭の「-word」をサポートしています。 > > 内部的には > > 全部のレコードを選択 → そこからwordにマッチするレコードを引く > > という処理をしています。で、「全部のレコードを選択」のときに > すべてのレコードにスコアが+1されます。なので、先頭に「-word」 > を書くとスコアが全体的に+1されます。 つまり、-wordは常に前方の条件とANDで評価されて、 -word1 word2 ==> word1を含まない OR word2を含む word2 -word1 ==> word2を含む AND word1を含まない となって、結果が異なる、ということでしょうか。 先頭の-wordが重くて、かつ常にANDになるのであれば、内部的にクエリの評価順 を変えて、'-word1 word2' => 'word2 -word1'に書き換えて検索したらいいので はとも思うのですが、それだと困るケースがあるのでしょうか? > ただ、繰り返しになりますが、先頭の「-word」は重いのでできれ > ば使って欲しくないです。本当に使う必要があるの!?と自問を重 > ねたうえで、しょうがない。。。と思って使う、くらいの感じで決 > 断して欲しい感じです。 いや、ドキュメントの例が先頭の「-word」なのですが... :) http://mroonga.org/ja/docs/reference/full_text_search/boolean_mode.html#id2 > これでまとめられそうでしょうか!? はい、「(不満はあるかもしれないけど)今の状態をそのままドキュメントにま とめる」という方針でやってみます。 かずひこ