Naoya Murakami
visio****@gmail*****
2014年 10月 24日 (金) 20:34:42 JST
村上です。 混乱させるだけなので、これ以上控えますが、また勘違いでしたね。 すいませんでした。 議論は、+や-が途中に含まれていようが、必ず最後に評価されるよう にしたほうがいいんじゃないかっていうことですね。 これは論理演算とは別の話でデフォルトを変えると完全に非互換なので、 いきなりデフォルトを変えるのはよくないと思いました。 2014年10月24日 20:13 Naoya Murakami <visio****@gmail*****>: > 村上です。 > > さらに勘違いでした。。混乱させてすいません。 > > これ、私は挙動別におかしくないと思います。 > +quick fox dog > fox +quick dog > fox dog +quick > > これは、デフォルトがORであれば、全件ヒットするdogかfoxがOR検索されるので、 > 全件ヒットは正しいですね。 > > イメージされているのは、デフォルトがANDのイメージなんではないかなと思いました。 > > 他のストレージエンジンのFTSはデフォルトがANDみたいですね。 > > これはどっちがいいかは一概に言えないのでなんともいえないです。。 > > http://groonga.org/senna/query.html > > SennaのD演算子みたいなので制御できたらいいんですかねぇ。 > > > 2014-10-24 19:18 GMT+09:00 Naoya Murakami <visio****@gmail*****>: > >> 村上です。 >> >> おお、勘違いすいません。 >> +がand絞り込みではなくて、スコア調整しかしていないような挙動ですね。 >> >> この挙動なら私も嬉しくないと思います。 >> >> 今は手もとで動かせないですが、Groongaでもそうなるのですかね。。 >> +のときにexpressionがand >> になっているのかどうかを後で試したい気がします。 >> 2014/10/24 19:05 "Kazuhiko" <kazuh****@fdiar*****>: >> >> > >> > かずひこです。 >> > >> > On 24/10/2014 11:44, Naoya Murakami wrote: >> > > Whereで絞り込んでないからおかしく感じるのでは?と思いました。 >> > > Whereで絞り込めばスコア0のはでてこないです。 >> > >> > +wordの順序によって、wordが入っていないレコードも非ゼロのスコアになっ >> > て、WHEREで指定してもヒットしてしまいます。 >> > >> > > mysql> SELECT title, MATCH (title) AGAINST('fox dog +quick' IN BOOLEAN >> > > MODE) AS >> > > -> score FROM books WHERE MATCH (title) AGAINST('fox dog +quick' >> IN >> > > BOOLEAN MODE); >> > > +------------------------------------------+-------+ >> > > | title | score | >> > > +------------------------------------------+-------+ >> > > | Quick brown fox jumps over the lazy dog. | 3 | >> > > +------------------------------------------+-------+ >> > > 1 row in set (0.00 sec) >> > > >> > > mysql> SELECT title, MATCH (title) AGAINST('fox dog +quick' IN BOOLEAN >> > > MODE) AS score FROM books; >> > > +---------------------------------------------+-------+ >> > > | title | score | >> > > +---------------------------------------------+-------+ >> > > | Quick brown fox jumps over the lazy dog. | 3 | >> > > | Slow white fox jumps over the diligent dog. | 0 | >> > > +---------------------------------------------+-------+ >> > > 2 rows in set (0.00 sec) >> > >> > 最後が+wordだとそうなるのですが、そうでないと以下のようになります。 >> > >> > DROP TABLE IF EXISTS books; >> > >> > CREATE TABLE books ( >> > `id` INTEGER AUTO_INCREMENT, >> > `title` text, >> > PRIMARY KEY(`id`), >> > FULLTEXT INDEX title_index (title) >> > ) ENGINE=mroonga default charset utf8; >> > >> > INSERT INTO books (title) VALUES ( >> > 'Quick brown fox jumps over the lazy dog.' >> > ); >> > >> > INSERT INTO books (title) VALUES ( >> > 'Slow white fox jumps over the diligent dog.' >> > ); >> > >> > SELECT title, MATCH (title) AGAINST('+quick fox dog' IN BOOLEAN MODE) AS >> > score FROM books; >> > +---------------------------------------------+-------+ >> > | title | score | >> > +---------------------------------------------+-------+ >> > | Quick brown fox jumps over the lazy dog. | 3 | >> > | Slow white fox jumps over the diligent dog. | 2 | >> > +---------------------------------------------+-------+ >> > 2 rows in set (0.00 sec) >> > >> > SELECT title, MATCH (title) AGAINST('+quick fox dog' IN BOOLEAN MODE) AS >> > score FROM books WHERE MATCH (title) AGAINST('+quick fox dog' IN BOOLEAN >> > MODE); >> > +---------------------------------------------+-------+ >> > | title | score | >> > +---------------------------------------------+-------+ >> > | Quick brown fox jumps over the lazy dog. | 3 | >> > | Slow white fox jumps over the diligent dog. | 2 | >> > +---------------------------------------------+-------+ >> > 2 rows in set (0.00 sec) >> > >> > SELECT title, MATCH (title) AGAINST('fox +quick dog' IN BOOLEAN MODE) AS >> > score FROM books; >> > +---------------------------------------------+-------+ >> > | title | score | >> > +---------------------------------------------+-------+ >> > | Quick brown fox jumps over the lazy dog. | 3 | >> > | Slow white fox jumps over the diligent dog. | 1 | >> > +---------------------------------------------+-------+ >> > 2 rows in set (0.00 sec) >> > >> > SELECT title, MATCH (title) AGAINST('fox +quick dog' IN BOOLEAN MODE) AS >> > score FROM books WHERE MATCH (title) AGAINST('fox +quick dog' IN BOOLEAN >> > MODE); >> > +---------------------------------------------+-------+ >> > | title | score | >> > +---------------------------------------------+-------+ >> > | Quick brown fox jumps over the lazy dog. | 3 | >> > | Slow white fox jumps over the diligent dog. | 1 | >> > +---------------------------------------------+-------+ >> > 2 rows in set (0.01 sec) >> > >> > ちなみにMyISAM (ft_min_word_len=3) とInnoDB FTSだと以下のようになります >> > (もうひとつのレコードはスコアがゼロ)。 >> > >> > ALTER TABLE books engine=MyISAM; >> > >> > SELECT title, MATCH (title) AGAINST('fox +quick dog' IN BOOLEAN MODE) AS >> > score FROM books WHERE MATCH (title) AGAINST('fox +quick dog' IN BOOLEAN >> > MODE); >> > +------------------------------------------+--------------------+ >> > | title | score | >> > +------------------------------------------+--------------------+ >> > | Quick brown fox jumps over the lazy dog. | 1.6666667461395264 | >> > +------------------------------------------+--------------------+ >> > 1 row in set (0.00 sec) >> > >> > ALTER TABLE books engine=InnoDB; >> > >> > SELECT title, MATCH (title) AGAINST('fox +quick dog' IN BOOLEAN MODE) AS >> > score FROM books WHERE MATCH (title) AGAINST('fox +quick dog' IN BOOLEAN >> > MODE); >> > +------------------------------------------+---------------------+ >> > | title | score | >> > +------------------------------------------+---------------------+ >> > | Quick brown fox jumps over the lazy dog. | 0.09061906486749649 | >> > +------------------------------------------+---------------------+ >> > 1 row in set (0.01 sec) >> > >> > On 24/10/2014 11:38, Kouhei Sutou wrote: >> > > そういう人が言い出しにくくなるくらい断定的に話を進めるのはよ >> > > くないんじゃないかなぁと思いました。 >> > >> > ごめんなさい… >> > >> > かずひこ >> > >> > _______________________________________________ >> > groonga-dev mailing list >> > groon****@lists***** >> > http://lists.sourceforge.jp/mailman/listinfo/groonga-dev >> >> >