[groonga-dev,02885] Re: BOOLEAN MODEの+とか-の意味

Back to archive index

Kazuhiko kazuh****@fdiar*****
2014年 10月 27日 (月) 18:51:44 JST


かずひこです。

On 25/10/2014 04:12, Naoya Murakami wrote:
>> (no operator)
>> By default (when neither + nor - is specified), the word is optional, but
> the rows that contain it are rated higher. This mimics the behavior of
> MATCH() ... AGAINST() without the IN BOOLEAN MODE modifier.
> 
> これは+、-というより、operatorなしの挙動の違いですね。
> 
> MySQLのFTSのoperatorなしはスコア調整しかせず、
> MroongaのoperatorなしはOR演算であるという違いです。
> (だから、OP_ADJUSTで同じなんですね)
> 
> 後ろ側に前よりも大きい集合のOR演算(論理和)があるなら、AND演算で
> 絞り込んだ件数よりも多くなるのは正しいと思います。
> 
> これは単なる私の意見ですが、現状のMroongaのデフォルトORのほうが
> 単純な論理演算なのでわかりやすいかなと思いました。

なるほど、そういう考え方をすれば現状のMroongaの仕様を理解しやすくなりま
すね。私は、MyISAMからの乗り換えなので、MyISAMの仕様というか挙動が前提す
ぎて思いつきませんでした。

確かに、MySQLのドキュメントにも、「前から評価する」とも「しない」とも書
いていませんし、冒頭の

> Note
> In implementing this feature, MySQL uses what is sometimes referred to as implied Boolean logic, in which
> 
> + stands for AND
> 
> - stands for NOT
> 
> [no operator] implies OR

を見ると、つまり + == AND で [no operator] == OR と理解すると(って須藤
さんが最初に回答していましたね)、Mroongaの挙動とも合致します。

ただ、それに加えて、+ / -の説明がmust / must notだったり、オペレータ無し
の場合が「任意だがスコアが加算される」と説明してあったりすることを考慮す
ると、MySQLの仕様と挙動は一致していると思います。

一方で、MroongaのドキュメントはMySQLの+ / - の must / must notの説明だけ
があって、冒頭の + == AND とか [no operator] == OR の説明がないので、仕
様と挙動が一致しないように感じたのだとわかりました。

> ただ、operatorなしがスコア調整という挙動で使いたい人がいるというのも
> 理解できます。
> 
> default_operatorを変更できる演算子なり、変数があれば、いいのかなと
> 思いました。

そうですね。[no operator] の仕様をちゃんと書けば、両方の挙動をわかりやす
く説明できそうな気がしてきました。

かずひこ




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