[groonga-dev,02803] Re: Boolean Modeの*の仕様

Back to archive index

Kouhei Sutou kou****@clear*****
2014年 9月 25日 (木) 12:27:14 JST


須藤です。

In <54228****@fdiar*****>
  "[groonga-dev,02796] Boolean Modeの*の仕様" on Wed, 24 Sep 2014 11:19:45 +0200,
  Kazuhiko <kazuh****@fdiar*****> wrote:

> Boolean Modeにおける*の仕様について疑問があります。
> 
> http://mroonga.org/ja/docs/reference/full_text_search/boolean_mode.html
> には、
> The asterisk serves as the truncation (or wildcard) operator.
> とありますが、前方一致、後方一致、中間一致のどれでも使えるものでしょうか?

前方一致だけに使えます。

  http://groonga.org/ja/docs/reference/grn_expr/query_syntax.html#prefix-search-condition

>> SELECT *, MATCH (content) AGAINST ("*day" in boolean mode) AS score
> FROM diaries;
> +----+--------------------------------------------------+-------+
> | id | content                                          | score |
> +----+--------------------------------------------------+-------+
> |  1 | It'll be fine tomorrow as well.                  |     1 |
> |  2 | It'll rain tomorrow.                             |     1 |
> |  3 | It's fine today. It'll be fine tomorrow as well. |     1 |
> |  4 | It's fine today. But it'll rain tomorrow.        |     1 |
> |  5 | Ring the bell.                                   |     0 |
> |  6 | I love dumbbells.                                |     0 |
> +----+--------------------------------------------------+-------+
> 
> '*day'がid=1やid=2にヒットするのは何故でしょうか? ちなみに
> 
>> SELECT *, MATCH (content) AGAINST ("*" in boolean mode) AS score FROM
> diaries;
> +----+--------------------------------------------------+-------+
> | id | content                                          | score |
> +----+--------------------------------------------------+-------+
> |  1 | It'll be fine tomorrow as well.                  |     1 |
> |  2 | It'll rain tomorrow.                             |     1 |
> |  3 | It's fine today. It'll be fine tomorrow as well. |     1 |
> |  4 | It's fine today. But it'll rain tomorrow.        |     1 |
> |  5 | Ring the bell.                                   |     0 |
> |  6 | I love dumbbells.                                |     0 |
> +----+--------------------------------------------------+-------+
> 
> '*'だけの結果も全く同じになりました。

どうしてでしょうねぇ。

SELECT *,
       MATCH (content) AGAINST ("*" in boolean mode) AS score
       FROM diaries
       WHERE MATCH (content) AGAINST ("*" in boolean mode);

でも同じ結果になりますか?


あと!
手元で試せたほうが嬉しいので「SELECT * FROM table」とかでデー
タを示してもらえるよりコピペして動かせる情報があると、とてもと
てもとてもうれしいです!(かずひこさんはわかってくれるはず。)

具体的に言うと、CREATE TABLEとINSERT INTOとSELECTが揃ってい
てそれらをコピペすると対象の状態を手元でも再現できるとうれし
いです!

> Boolean Modeでの'*'の期待される仕様や制限について教えてくださると幸いです。

前方一致で使えます。前方一致でないときは「*」そのものとして
動きます。

-- 
須藤 功平 <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