# groonga - オープンソースのカラムストア機能付き全文検索エンジン

- English page

### ナビゲーション

- 索引
- 次へ |
- 前へ |
- groonga v3.0.0ドキュメント »
- 8. リファレンスマニュアル »
- 8.11. 関数 »

# 8.11.6. query

## 8.11.6.1. 概要

`query` は `--match_columns` と `--query` のパラメータを関数の引数として指定することを可能にします。

`query` はgroongaの組み込み関数の1つで、複数の `query` 関数を `--filter` オプションのパラメータとして指定することができます。

そのような柔軟性があるので、 複数の `query` 関数を組合せることで全文検索の振舞いを制御することができます。

`query` は select コマンドの `--filter` 内でのみ指定できます。

## 8.11.6.2. 構文

`query` は2つの引数が必要です。 `match_column` と `query_string` です。

    query(match_column, query_string)

## 8.11.6.3. 使い方

使い方を示すために使うスキーマ定義とサンプルデータは以下の通りです。

サンプルスキーマ:

実行例:

    table_create Documents TABLE_NO_KEY
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Documents content COLUMN_SCALAR Text
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    table_create Terms TABLE_PAT_KEY|KEY_NORMALIZE ShortText --default_tokenizer TokenBigram
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Terms documents_content_index COLUMN_INDEX|WITH_POSITION Documents content
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    table_create Users TABLE_NO_KEY
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Users name COLUMN_SCALAR ShortText
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Users memo COLUMN_SCALAR ShortText
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    table_create Lexicon TABLE_HASH_KEY ShortText \
      --default_tokenizer TokenBigramSplitSymbolAlphaDigit \
      --normalizer NormalizerAuto
    column_create Lexicon users_name COLUMN_INDEX|WITH_POSITION Users name
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Lexicon users_memo COLUMN_INDEX|WITH_POSITION Users memo
    # [[0, 1337566253.89858, 0.000355720520019531], true]

サンプルデータ:

実行例:

    load --table Users
    [
    {"name": "Alice", "memo": "groonga user"},
    {"name": "Alisa", "memo": "mroonga user"},
    {"name": "Bob",   "memo": "rroonga user"},
    {"name": "Tom",   "memo": "nroonga user"},
    {"name": "Tobby", "memo": "groonga and mroonga user. mroonga is ..."},
    ]
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    # [[0, 1337566253.89858, 0.000355720520019531], 5]

`--match_columns` と `--query` 引数を使わずにキーワード'alice'を``query`` 関数を使って検索する簡単な使用例です。

実行例:

    select Users --output_columns name,_score --filter 'query("name * 10", "alice")'
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         1
    #       ],
    #       [
    #         [
    #           "name",
    #           "ShortText"
    #         ],
    #         [
    #           "_score",
    #           "Int32"
    #         ]
    #       ],
    #       [
    #         "Alice",
    #         10
    #       ]
    #     ]
    #   ]
    # ]

上記のクエリを実行する際、'alice'というキーワードには重みづけとして値10を設定します。

`query` あり/なしで対照的な例がこちらです。

実行例:

    select Users --output_columns name,memo,_score --match_columns "memo * 10" --query "memo:@groonga OR memo:@mroonga OR memo:@user" --sortby -_score
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "name",
    #           "ShortText"
    #         ],
    #         [
    #           "memo",
    #           "ShortText"
    #         ],
    #         [
    #           "_score",
    #           "Int32"
    #         ]
    #       ],
    #       [
    #         "Tobby",
    #         "groonga and mroonga user. mroonga is ...",
    #         4
    #       ],
    #       [
    #         "Alice",
    #         "groonga user",
    #         2
    #       ],
    #       [
    #         "Alisa",
    #         "mroonga user",
    #         2
    #       ],
    #       [
    #         "Bob",
    #         "rroonga user",
    #         1
    #       ],
    #       [
    #         "Tom",
    #         "nroonga user",
    #         1
    #       ]
    #     ]
    #   ]
    # ]

この場合、'groonga'と'mroonga'と'user'というキーワードは同じ重みづけがされています。この方法ではキーワードごとに異なる重みづけを行うことはできません。

実行例:

    select Users --output_columns name,memo,_score --filter 'query("memo * 10", "groonga") || query("memo * 20", "mroonga") || query("memo * 1", "user")' --sortby -_score
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         5
    #       ],
    #       [
    #         [
    #           "name",
    #           "ShortText"
    #         ],
    #         [
    #           "memo",
    #           "ShortText"
    #         ],
    #         [
    #           "_score",
    #           "Int32"
    #         ]
    #       ],
    #       [
    #         "Tobby",
    #         "groonga and mroonga user. mroonga is ...",
    #         51
    #       ],
    #       [
    #         "Alisa",
    #         "mroonga user",
    #         21
    #       ],
    #       [
    #         "Alice",
    #         "groonga user",
    #         11
    #       ],
    #       [
    #         "Tom",
    #         "nroonga user",
    #         1
    #       ],
    #       [
    #         "Bob",
    #         "rroonga user",
    #         1
    #       ]
    #     ]
    #   ]
    # ]

一方、複数の `query` を指定することで、'groonga'と'mroonga'と'user'それぞれのキーワードに対し異なる重みづけを行えます。

結果として、意図した様に異なる重みづけを行いつつ全文検索の振舞いを制御することができます。

## 8.11.6.4. 引数

必須引数は二つあります。 `match_column` と `query_string` です。

### 8.11.6.4.1. `match_column`

> `match_columns` と同様のパラメータを指定します。

match_columnについては match_columns を参照してください。

### 8.11.6.4.2. `query_string`

> `query` と同様のパラメータを指定します。

query stringについては query を参照してください。

## 8.11.6.5. 戻り値

`query` は真偽値(trueもしくはfalse)を返します。

## 8.11.6.6. TODO

- query_expansionのサポート
- query_flagsのサポート

## 8.11.6.7. 参考

- select

### ナビゲーション

- 索引
- 次へ |
- 前へ |
- groonga v3.0.0ドキュメント »
- 8. リファレンスマニュアル »
- 8.11. 関数 »