[groonga-dev,02835] Re: IN NATURAL LANGUAGE MODEにおける検索スコア

Back to archive index

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

> これでまとめられそうでしょうか!?

はい、「(不満はあるかもしれないけど)今の状態をそのままドキュメントにま
とめる」という方針でやってみます。

かずひこ




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