Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【Groongaで学ぶ全文検索 2016-02-26】GroongaでSelectした時の出力方法いろいろ

More than 5 years have passed since last update.

はじめに

GroongaでSelectした時の出力方法いろいろ

Selectについて

  • Groongaは全文検索エンジンです。なのでSelectは最も重要な機能といえます。
  • Groongaでは以下のような特徴的な出力方法を有しているので、その内容をいくつかピックアップして説明します。
    • スニペット
    • オフセット
    • ソート
    • 集計
      • カウント
      • 合計
      • 平均
      • 最大値
      • 最小値
    • クエリー展開
    • カラムの重みづけ
    • 重みの底上げ

スニペット(snippet_html)

  • snippet_html関数の指定で、検索キーワード周辺の文字列を抽出されます。
  • 抽出された文字列のうち、検索キーワードは以下のようなタグで囲まれます。
    <span class="keyword">[検索キーワード]</span>
  • スニペットはMroongaでやったことがあって、Mroongaの場合はmroonga_snippetという関数でやってました。
  • 以下で少し触れています
    MroongaとownCloudの良い関係 Groonga Meetup 2015

オフセット(offset)

  • offsetを指定することで途中から結果を出せます。
  • 勿論limitも指定可能です。
  • 因みにlimitのデフォルトは10なので、純粋にselectすると10件しかレコードが抽出されないので、ご注意を。
  • オフセットはページング処理に使われることが多いのです。

ソート(sortby)

  • 勿論ソートできます。
  • twitterとかでも使われている概念らしいのですが、一貫性のあるページングを実現する場合は、offsetに0を指定して、id等順序性のあるカラムでソートした上で、そのカラムで範囲検索するのが常套手段とのことです。
  • で、Groongaはその範囲検索出来ることがスゴイんです。

集計

  • おなじみの集計できます。
  • 集計という括りにすると少し違いますがドリルダウンdrilldownは抑えておきたい機能のひとつです。

クエリー展開

  • キーワード展開という呼び方でも良いみたいです。
  • 画面入力に親和性の高い記載内容がクエリ言語で解析されます。
  • つまり、入力からクエリに変換する実装をGroonga側でサポートしてくれることになります。
  • 例えば、以下のようなパターンです。
    • 「A B」と入力すると「A AND B」で検索される。
    • 「A or B」と入力すると「A OR B」で検索される。
  • 因みにANDとORをSQLでイメージすると、ANDはINTERSECTで、ORはUNIONとのことです。
    INTERSECT UNION

カラムの重みづけ(match_columns)

  • カラム毎に重み付けして、出力順変えることが出来ます。
  • 検索結果を上位に出力する場合、この手の手段を使ってスコアを上げます。
  • 例えば、Eコマースの商品テーブルで、タイトルカラムと商品説明カラムを「セール」という文字列で全文検索して、商品一覧表示する時に、タイトルに「セール」って文字が付いてる方が、お客さんの目を引くわけなので、タイトルカラムの重みを付けて、タイトルに「セール」という文字が入ってる商品のスコアを高くして、なるべく上に表示させることが出来ます。

重みの底上げ(filter)

  • 重み付けはカラムに対してですが、重みの底上げはレコードに対してスコアを上げる仕掛けです。
  • 例えば、先程のカラムの重み付けでセールが含まれるレコードの内、「春のセール」という文字列を含むレコードを上位に出力したい場合、このfilterを使って「春のセール」という文字列が入ってたらスコアを+10とかできるので、セール商品の中でも、春のセール商品を更に上に表示させるということ出来るのです。

さいごに

  • selectはGroongaの根幹なので、今回の勉強会は良いネタだったと思われます!こんな便利なやり方があるのかと、勉強になりました。
  • また、複数テーブルを跨いだ検索がスゴイとかMroongaはGroogaのエンジンに直結してるとか、目から鱗な情報が飛び交っており、この勉強会は開始から参加しなきゃいけないと再認識しました。
  • 引き続き、ここで得た情報をアウトプットしていきたいですね。
ukitiyan
ここでの記載内容は個人の見解であり、所属する団体の公式見解ではありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away