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

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

Groongaを使ったゆるい検索

表記揺れや間違ったキーワードでも検索にヒットさせたい、というニーズを実現するためのアプローチ方法について学びました。

アプローチの分類

  1. 間違っていてもヒットさせてあげる
    1. データで頑張る
    2. 検索時に頑張る
  2. そもそも間違わないようにしてあげる

間違っていてもヒットさせてあげる

データで頑張る編

間違うであろう内容を先回りして登録していく手法

  1. 検索ログから間違いの傾向を検出して登録していくとか。
    • typoとかに対応しやすい
    • Groongaのログから検出するツールがある。
  2. 某pediaのredirectページを集めて登録するとか。
    • 略称や別名は対応しやすい
  3. 元データを登録時に形態素解析してありうる読みを全部登録していくとか。
    • 読み間違えとかに対応しやすい

検索時に頑張る編

検索時にGroongaの力でヒットさせる手法

  1. 数文字の間違いは誤差として検索できる(fuzzy_search機能)
    • fuzzy_search機能を使うと、数文字の誤差を無視してヒットさせる事ができる。
    • mroongaでの使い方
      • MATCH AGAINST句のクエリを*SSで始めるとgroongaのコマンドを書ける。そこでfuzzy_searchコマンドを使えるようになる。
        • SSはScript Syntaxの略。参考
  2. 類似した文章を検索できる(類似文書検索)
    • 類似文書検索をすると、完全に一致していなくてもヒットさせる事ができる。
    • mroonga
      • MATCH AGAINST句を IN BOOLEAN MODEではなく IN NATURAL LANGUAGE MODEにすると類似文書検索になる。
        • 実はデフォルト値なので、 IN BOOLEAN MODEを削除するだけでもOK。
    • 固有名詞を検索させたい場合は、MecabトークンよりBigramを使うといいかも(要検証)
      • 類似検索は一部のトークンが一致してればOKという機能なので、小さいトークンにすると一致する確率があがる。
        • ノイズが多くなるけど。

そもそも間違わないようにしてあげる

  • 時間切れにつき、またの機会に。

まとめ

  • 「間違っていてもヒットさせてあげる」においては、検索時よりはデータ収集に力を入れたほうが効果が高そう。
  • 「そもそも間違わないようにしてあげる」に力を入れるのがお勧めという説があったので、要勉強。
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
3
Help us understand the problem. What are the problem?