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] の仕様をちゃんと書けば、両方の挙動をわかりやす く説明できそうな気がしてきました。 かずひこ