Posted at

Groongaで学ぶ全文検索 2016-02-26

More than 3 years have passed since last update.


selectについて


selectとは

Groongaを操作するインターフェースであるコマンドのうちレコードを取得するもの。

全文検索ではこのselectが肝になる。

※その他にtable_createやloadなどのコマンドもある。

参考)Groonga主なコマンド

http://groonga.org/ja/docs/tutorial/introduction.html#basic-commands


selectでできること


  1. カラムに対して全文検索(絞りこみ

  2. カラムの完全一致

  3. snippet_html出力
    対象テキスト中から検索キーワード周辺のテキストを抽出できる。
    キーワードは <span class="keyword"></span>で囲まれている
    参考)
    http://groonga.org/ja/docs/reference/functions/snippet_html.html

  4. グルーピングができる
    著者毎にグルーピングした本のレコードを抽出するなどができる。

  5. カラム毎に重みづけして出力順を変更できる
    タイトルを著者名より重視するなどの重みづけができる
    こちらはクエリ毎に指定できる

  6. クエリ言語を解析できる
    例)
    通常キーワードを複数入力した場合AND検索になるが、
    ユーザーが「OR」をキーワードの間に入力した場合
    OR検索できるなどのように、ユーザーが挙動をカスタマイズできる

  7. 集計機能
    下記のような機能がある
    カウント
    合計
    平均
    最大値
    最小値

  8. クエリ展開
    例)
    焼き肉、焼肉、やきにく
    どれで検索されてもヒットするようにできる(あらかじめ登録が必要

  9. 重みの底上げ(カラムの重みづけでレコードを取得した後にプラスで重みをつけられる。
    例1)
    キャンペーン中のレコードは上に出すなど
    レコード単位に出力を変えられるため、よりユーザーが欲しいものを上に表示することが可能。
    例2)
    クリック数が多いものがユーザーが欲しいものだと判断して上に表示するなどもできる

  10. ソートができる

  11. オフセットが利用できる(途中から取得できる
    ページングなどのように途中でデータが追加された場合にも影響を受けたくない場合には、
    offsetを常に0にして指定したidより小さいものだけ表示など範囲を指定して検索するようにする。
    (登録日時を条件にしてもよい)

  12. 複数テーブルをまたいだ検索ができる
    例)
    キーワードを含むコメントを持った記事を抽出するなどができる。
    実現するには記事にコメントの_idを格納するベクターカラムを持つようにする
    後から関連するものが増えた場合にカラムを追加する必要があるが、カラム指向のためコストはそれほど高くない