Posted at

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

More than 3 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のエンジンに直結してるとか、目から鱗な情報が飛び交っており、この勉強会は開始から参加しなきゃいけないと再認識しました。

  • 引き続き、ここで得た情報をアウトプットしていきたいですね。