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

Back to archive index

Kouhei Sutou kou****@clear*****
2014年 10月 24日 (金) 12:30:24 JST


須藤です。

In <5448E****@fdiar*****>
  "[groonga-dev,02854] BOOLEAN MODEの+とか-の意味" on Thu, 23 Oct 2014 13:22:08 +0200,
  Kazuhiko <kazuh****@fdiar*****> wrote:

> 現状の仕様は、検索語を前から順にスコアを足しながら、+や-が来た時点で、そ
> れを満たさないレコードのスコアがゼロになって、それ以降はまた順にスコアを
> 足していく、みたいな感じの挙動に見えます。

そうですね。

  +quick fox dog

は

  (((ALL_RECORDS AND quick) OR fox) OR dog)

という風に評価しています。

最初に全部のレコードが含まれる集合があって、左から順に

  * +が前置されていたら「AND キーワード」
  * -が前置されていたら「NOT キーワード」
    (NOTはマッチしたものを集合から引く演算と考えてください)
  * +も-も前置されていなかったら「OR キーワード」

として処理しています。

http://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html

の最初の方に

> 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

と書いていますが、それと同じ考え方です。

> boolean modeと言うからには、+や-は、ドキュメントにも書いてあるように、
> 「絶対に含まれる」「絶対に含まれない」を意味するのが妥当と思いますが、い
> かがでしょうか。

「boolean modeと言うから」のところはピンと来ていませんが、
MySQLのドキュメントに書いている通り動くのが妥当だと、私も思
います。


http://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html

の前置なしのキーワードのところの説明は↓となっているので、OR
というよりも、「検索結果に影響なくスコアを変えるだけ」みたい
に扱ったほうがいいんですかねぇ。

> (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.


-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>

Groongaベースの全文検索システムを総合サポート:
  http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
  http://www.clear-code.com/recruitment/
コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ:
  http://www.clear-code.com/services/code-reader/




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