Support #2125

[日本語版] Mroonga full text Search in Boolean mode

Added by Kenji Maruyama about 4 years ago. Updated almost 4 years ago.

Status:ドキュメント中Start date:12/11/2013
Priority:NormalDue date:
Assignee:Kenji Maruyama% Done:

0%

Category:-
Target version:-

Description

[日本語版] Mroonga full text Search in Boolean mode : Boolean mode における検索の挙動の説明になります。

英語版に翻訳される原本でもあります。

http://redmine.groonga.org/projects/mroonga/wiki/Mroonga_full_text_Search_in_Boolean_mode?parent=Index

History

#1 Updated by Kenji Maruyama about 4 years ago

  • Tracker changed from Feature to Support

#2 Updated by Kenji Maruyama about 4 years ago

  • Status changed from 新規 to 担当者作業中

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

http://dev.mysql.com/doc/refman/5.1/ja/fulltext-boolean.html

を 参考に Mroongaのブール全文検索 の 演算子の挙動について書きました。

対応する プラグマ もここに追加する予定ですが、

http://redmine.groonga.org/issues/2099 を直す方が先ですね。。。

#3 Updated by Susumu Yata about 4 years ago

演算子の説明ならタイトルに演算子の説明だと明示すべきです.

それから,全文検索における演算子がどういうものか,最初に簡単な説明を入れた方がわかりやすくなると思います. すくなくとも,サポートする演算子のリストに「演算子なし」が入っている問題は解決できるはずです.

「それを必ず行に含まれることを示す」が怪しいです.

引用符や括弧を演算子に入れるのは一般的じゃないです. 本件の引用符は微妙なところですが….

これら(↑)は参考にした相手が悪かったのだと思います.

それから,全体的に気になるのは CJK の扱いです. 単語とフレーズの違いとか…. 空白区切りだと引用符でフレーズを示すのは明らかなのですが,たとえば日本語だと空白を入れなくてもフレーズになってしまいます.

とはいえ, CJK の説明を混ぜると悲惨なことになるのは予想できるので, CJK については,ほかのページに誘導するだけでかまわないと思います.

#4 Updated by Kenji Maruyama about 4 years ago

レビューありがとうございます。

これら(↑)は参考にした相手が悪かったのだと思います.

修飾子に変えました... 「演算子なし」が入っている問題 は最初に説明しました。

CJK の説明を混ぜると悲惨なことになるのは予想できるので, CJK については,ほかのページに誘導するだけでかまわないと思います.

TODO: これは CJK のところで説明した方が良さそうです。 http://redmine.groonga.org/projects/mroonga/wiki/Mroonga_Fulltext_search_for_CJK_documents_(jp)_

以下要仕様確認:

W プラグマのところで、http://qwik.jp/senna/query.html によれば、

  • セクションごとに検索スコアの倍数を指定することができます。

検索スコアの倍数はどういう意味なのか? Mroongaでテストしてみると、自由に重みを設定できるのですが。。。

  • 重みは、省略された場合1となります。

Mroongaの場合だと、重みを省略した場合0になっているのだが。。。

#5 Updated by Kouhei Sutou about 4 years ago

Kenji Maruyama wrote:

W プラグマのところで、http://qwik.jp/senna/query.html によれば、


  • セクションごとに検索スコアの倍数を指定することができます。

検索スコアの倍数はどういう意味なのか? Mroongaでテストしてみると、自由に重みを設定できるのですが。。。


  • 重みは、省略された場合1となります。

Mroongaの場合だと、重みを省略した場合0になっているのだが。。。

バグな気がします!

#6 Updated by Kenji Maruyama about 4 years ago

バグな気がします!

ありがとうございます。新たなチケットにする前に期待する動作について確認させてください。

"セクションごとに検索スコアの倍数を指定"というのは 具体的にどういうことなのでしょうか。。。 元々の検索スコアをまず知っていなればならない、その上Wプラグマでの指定は 元々の検索スコア * 2, 元々の検索スコア * 3 での指定ということでしょうか。

重みは、省略された場合は 例えばセクション0の重みを省略ということは、*W0:1,1:1 を *W1:1 として省略するのが良いでしょうか、それとも *W0:,1:1 でしょうか。現状では *W1:1 で動くように実装されていますが、これは期待どおりの動作でしょうか。

#7 Updated by Kouhei Sutou about 4 years ago

Kenji Maruyama wrote:

バグな気がします!


ありがとうございます。新たなチケットにする前に期待する動作について確認させてください。

はい!基本的にTritonn(Senna)互換が目指すところです。

参考: http://qwik.jp/tritonn/userguide.html#f5c79fc5c181a5dee33f87af7eb54ae9

"セクションごとに検索スコアの倍数を指定"というのは 具体的にどういうことなのでしょうか。。。 元々の検索スコアをまず知っていなればならない、その上Wプラグマでの指定は 元々の検索スコア * 2, 元々の検索スコア * 3 での指定ということでしょうか。

いえ、違います。そのセクションでヒットした場合に、通常のスコアに対して何倍するか、です。

重みは、省略された場合は 例えばセクション0の重みを省略ということは、*W0:1,1:1 を *W1:1 として省略するのが良いでしょうか、それとも *W0:,1:1 でしょうか。現状では *W1:1 で動くように実装されていますが、これは期待どおりの動作でしょうか。

セクションは1-originなので *W0 は不正な指定です。

重みを省略する場合は *W1:,2:1 ではなく、 *W1,2:1 です。(: は入れない。)

#8 Updated by Kenji Maruyama about 4 years ago

ありがとうございます。

そのセクションでヒットした場合に、通常のスコアに対して何倍するか、です。

以下のように連続実行の場合は、"通常のスコアに対して何倍するか"なので、8倍ではなく、4倍になるんですね。

SELECT title, comment, MATCH (title,comment) AGAINST('*W1:2 +Groonga' IN BOOLEAN MODE) AS score FROM books;
SELECT title, comment, MATCH (title,comment) AGAINST('*W1:4 +Groonga' IN BOOLEAN MODE) AS score FROM books;

セクションは1-originなので *W0 は不正な指定です。

なるほど。

現状のMroongaのテストケースをみますと、0-originですね。

例: mysql-test/mroonga/storage/fulltext/boolean_mode/pragma/weight/t/three_or_more_sections.test

SELECT *, MATCH(title, category, content)
          AGAINST("*W0:2,1:10,2:1 +天気" in BOOLEAN MODE) AS score
       FROM diaries
       WHERE MATCH(title, category, content)
             AGAINST("*W0:2,1:10,2:1 +天気" in BOOLEAN MODE);

重みを省略する場合は *W1:,2:1 ではなく、 *W1,2:1 です。(: は入れない。)

了解です。ありがとうございます。*W1,2:1 として省略してしまった場合は、W1の重み1になっていて問題ありません。

気になっていたのは、 *W2:1 のように W1の重みを指定しない場合のクエリも通るのですが、この場合、例えば、以下のクエリのように、セクション1のtitleにもGroongaが含まれている文書の場合、結果のscoreは0になっているのは期待した結果ではないですよね!? scoreは1になっていてほしいところ。

SELECT title, comment, MATCH (title,comment) AGAINST('*W2:4 +Groonga' IN BOOLEAN MODE) AS score FROM books;

#9 Updated by Kouhei Sutou about 4 years ago

Kenji Maruyama wrote:

そのセクションでヒットした場合に、通常のスコアに対して何倍するか、です。


以下のように連続実行の場合は、"通常のスコアに対して何倍するか"なので、8倍ではなく、4倍になるんですね。


SELECT title, comment, MATCH (title,comment) AGAINST('*W1:2 +Groonga' IN BOOLEAN MODE) AS score FROM books;
SELECT title, comment, MATCH (title,comment) AGAINST('*W1:4 +Groonga' IN BOOLEAN MODE) AS score FROM books;

そのとおりです!

セクションは1-originなので *W0 は不正な指定です。


なるほど。


現状のMroongaのテストケースをみますと、0-originですね。

うお、これ、実装がバグっている(Tritonn互換じゃない)ような気がしますね。。。

重みを省略する場合は *W1:,2:1 ではなく、 *W1,2:1 です。(: は入れない。)


了解です。ありがとうございます。*W1,2:1 として省略してしまった場合は、W1の重み1になっていて問題ありません。

よかったです!

気になっていたのは、
*W2:1 のように W1の重みを指定しない場合のクエリも通るのですが、この場合、例えば、以下のクエリのように、セクション1のtitleにもGroongaが含まれている文書の場合、結果のscoreは0になっているのは期待した結果ではないですよね!? scoreは1になっていてほしいところ。


SELECT title, comment, MATCH (title,comment) AGAINST('*W2:4 +Groonga' IN BOOLEAN MODE) AS score FROM books;

はい、そうです!(セクション1のtitleに「だけ」ですよね?)

#10 Updated by Kenji Maruyama about 4 years ago

セクション1のtitleに「だけ」ですよね?

はい。

上記二つのBugについてそれぞれ別チケットを立てました。

http://redmine.groonga.org/issues/2151

http://redmine.groonga.org/issues/2152

#12 Updated by Kenji Maruyama almost 4 years ago

  • Status changed from 担当者作業中 to 完了チェック待ち

ドキュメントレビュー後修正完了、関連する二つのBugもfixしました.

関連:このドキュメントの英語版は チケット http://redmine.groonga.org/issues/2202 になります。

#13 Updated by Kenji Maruyama almost 4 years ago

  • Status changed from 完了チェック待ち to ドキュメント中

http://redmine.groonga.org/issues/2202#note-4 のレビューを受けて

再度修正になります。

Also available in: Atom PDF