Kazuhiko
kazuh****@fdiar*****
2014年 9月 26日 (金) 22:45:39 JST
On 26/09/2014 13:57, Kouhei Sutou wrote: > In <54252****@fdiar*****> > "[groonga-dev,02816] Re: IN NATURAL LANGUAGE MODEにおける検索スコア" on Fri, 26 Sep 2014 10:50:23 +0200, > Kazuhiko <kazuh****@fdiar*****> wrote: > >>> 「boolean」ってスコアは小さめっていう意味合いもあったんでし >>> たっけ。私は、ANDとかORを使って検索できる、っていう意味なの >>> かなぁと思っていました。 >> >> boolean、つまり「あったらTrue、なかったらFalse」で、Trueの数を返すものだ >> と思っていました。少なくともMyISAMだとそうです。 > > それでORは説明できると思いますが、ANDが説明できないような。。。 おっしゃるとおり。。。 ということは、「natural language modeでは期待されるスコアとして類似度が 考えられるが、boolean modeでは0かそうでないかが返ることが重要で、スコア の値にそれ以上の何が期待されるかはよくわからない」ということでしょうか。 それでも、Mroongaのboolean modeでは「各キーワードが出現した数の合計、た だしANDやNOT等の条件を満たさない場合は無条件にゼロ」みたいに何らかの仕様 が明記してあると安心して利用できる気がします。もちろん、「0かそうでない か以上の意味は期待できない」という仕様もありでしょう。その場合は、「じゃ あ、ソートしなくていいね」という判断ができますし。 >>> もしかしたら、なんですけど、かずひこさんが求めている挙動って >>> >>> "word1 word2 word3" IN BOOLEAN MODE >>> >>> (word1 OR word2 OR word3)だったりしないかなぁと思いました。 >> >> 求めている挙動は、「適当にキーワードを多めにつっこんだら、いい感じのスコ >> アでソートされて返ってくる」です。 >> >> 上述の仕様の違いで、Mroonga in boolean modeは、MyISAM in boolean modeよ >> りはましな結果になりそうですが、やっぱりキーワードごとの重みが考慮される >> ほうが「いい感じのスコアでソート」になりそうなので、(word1 OR word2 OR >> word3)だとあまり嬉しくありません。以下、比較実験しました。 > > 例を示してくれてありがとうございます! > ただ、この例だとどのcontentが上位にくるのが妥当なのかわから > ないので、「望ましい挙動」がわからないなぁと思いました。 > 「fine tomorrow bell」で検索したら「Ring the bell.」が一番上 > 位になってうれしい。。。の?みたいな感じです。 まあ、あれは例が極端なので、bellだけが突出して高い重みを持ってしまってい ますが、でも「TD-IDFはそういうもの」なんじゃないでしょうか。 :) かずひこ