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/