Viewing entries in
Full text search

 全文検索システム「SOLR」の紹介 - 第3回「検索ノイズと検索漏れ」

全文検索システム「SOLR」の紹介 - 第3回「検索ノイズと検索漏れ」

みなさん、こんにちは。lunettesチームの的場です。 今回は「検索ノイズと検索漏れ」について説明します。

検索ノイズと検索漏れ

前回Solrでは転置インデックスを作成して全文検索を行うと紹介しましたが、その際に気をつけることとして検索ノイズと検索漏れがあります。

検索ノイズとは

例えば「東京都」という単語には「京都」という単語が含まれています。「京都」で検索した場合に「東京都」と書いてある文書も検索結果に含まれてしまうのが検索ノイズです。 これは前回紹介した転置インデックスの作成方法の内、N-gramで起こりやすい現象になります。形態素解析の場合は辞書に載っている単語で検出するので「東京都」が辞書に載っていれば「京都」で検索した場合に「東京都」が結果に出ないようにすることが出来ます。

検索漏れとは

検索漏れは検索ノイズと逆で、例えば「小学校」「中学校」という単語が文章内に含まれている場合に、「学校」で検索したときに検索結果に含まれない場合が発生します。 検索漏れは形態素解析の場合に起こりやすい現象となっています。N-gramでは基本的に検索漏れは起こりません。

まとめ

全文検索では単語の検出方法によって、検索ノイズと検索漏れが起こります。

その他にも以下のような特徴があります。

  • 形態素解析
    • インデックスのデータは比較的小さくなる
    • 検索速度は比較的速い
    • 辞書のメンテナンスが必要
  • N-gram
    • インデックスのデータは比較的大きくなる
    • 検索速度は形態素解析よりは遅くなる

用途に応じて使い分けましょう。

 全文検索システム「SOLR」の紹介 - 第2回「全文検索の仕組み」

全文検索システム「SOLR」の紹介 - 第2回「全文検索の仕組み」

みなさん、こんにちは。lunettesチームの的場です。 前回に引き続き、全文検索システム「Solr」を紹介していきます。

全文検索の仕組み

全文検索では検索を高速に行うため、あらかじめ転置インデックスというデータを作成しておく必要があります。

転置インデックスは専門書の最後の方に付く索引をイメージしてもらえばわかりやすく、どのような言葉がどの文書のどの位置に存在するかを記録したデータです。

作成された転置インデックスは特定の順序で並べられており、検索で指定された文字や文章が索引に存在するかを高速に調べ、存在する場合はどの文書内に検索したい文字や文章が含まれているか取得することが出来ます。

転置インデックスの作り方

転置インデックスを作る際に一番問題となるのは単語の検出方法です。英語のような言語ではスペースで単語が区切られているため、単語の検出が容易ですが、日本語ではどこまでを一つの単語として扱うかは課題が多いです。

日本語における転置インデックスの作成方法としては形態素解析を用いる方法とN-gramを用いる場合があります。

形態素解析による単語検出

形態素解析は辞書に登録してある単語に基づいて単語を検出する方法です。

例えば、「アットウェアは神奈川県横浜市西区みなとみらいに所在しています」という文章に形態素解析処理をすると以下のようになります。

  • アット(名詞)
  • ウェア(名詞)
  • は(助詞)
  • 神奈川県(名詞)
  • 横浜市(名詞)
  • 西区(名詞)
  • みなとみらい(名詞)
  • に(助詞)
  • 所在(名詞)
  • し(助動詞)
  • て(助詞)
  • い(助動詞)
  • ます(助動詞)

形態素解析は辞書に載っている単語で区切りますので、この辞書にはアットウェアは登録されていないようですね。アットウェアが辞書登録されていれば、アットウェアのひとかたまりで名詞として検出されます。

形態素解析を使うことによりこの文書に含まれている単語は「アット」「ウェア」「神奈川県」「横浜市」「西区」「みなとみらい」「所在」などであることがわかり、それらを転置インデックスに登録することにより、その単語が含まれる文書を高速に探すことが出来るようになります。

n-gramによる単語検出

n-gramは意味のある単語は意識せずに、文字数で文章を区切って単語を検出する方法です。 1文字で区切る場合はuni-gram、2文字で区切るbi-gramと呼びます。

bi-gramで「神奈川県」という単語を区切った場合は「神奈」「奈川」「川県」という単語が検出されます。

検索で指定された言葉もbi-gramで区切って検索するので「神奈川」で検索した場合は「神奈」と「奈川」が含まれる文書を探すことになります。

それぞれの特徴

形態素解析のメリットとしては「n-gramに比べて転置インデックスのデータ量が小さい」点で、デメリットとしては「検索漏れがある」があります。

n-gramのメリットとしては「検索漏れがない」点で、デメリットは「転置インデックスのデータ量が大きい」「検索ノイズが多くなる」になります。

検索漏れと検索ノイズについては重要な内容ですので、次回詳しく説明します。

全文検索システム「Solr」の紹介

全文検索システム「Solr」の紹介

みなさん、こんにちは。lunettesチームの的場です。

肩書きはTechnical Promoterを名乗っています。 役割としては、新しい技術の利用を推進したり、技術レベルの底上げなどになります。

今回はチーム内のプロジェクトでよく使われているオープンソースの検索エンジン「Solr」を紹介します。

Solrとは

Apache Software Foundationで提供されているオープンソースの全文検索システムです。 全文検索自体はApache Luceneという同じくApache Software Foundationで提供されている全文検索エンジンを使用しています。

全文検索とは

全文検索とは、大量の文書から特定の文字や文章が含まれている文書を検索する仕組みです。

みなさんもよく使われているGoogleも全文検索の仕組みを使って世界中のWebサイトを検索しています。 また各Webサイトごとに全文検索を持っているものを多く、それらは各Webサイト内に限った検索が出来るようになっています。

全文検索を利用することによって、大量にある情報から必要な情報を得ることが出来るのです。

なぜSolrを選んだか

通常のWebシステムではデータの保存や検索にはMySQLやPostgreSQLなどのリレーショナルデータベースシステムを利用することが多いです。それらの中にも全文検索に対応しているものはありますが、標準機能ではなくてインストールが面倒だったり、成熟されていないため安定性に不安があったり、性能や機能面における拡張性に不安があったりします。

SolrはJavaのみで動作するためインストールは簡単で、利用者も多いため比較的安定しており、性能や機能面における拡張性も十分考慮されています。 また、日本人も開発に参加しているため、日本語の検索も考慮されています。

ただし、Solrを使えば全てのデータに対応出来るわけではなく、リレーショナルデータベースシステムで良く扱う関係性を持ったデータなどは不得意な場合もありますので適材適所という形になります。 チーム内のプロジェクトでもSolrと別のデータストア(PostgreSQLやCouchbaseなど)を併用しています。

次回はSolrの検索の仕組みを紹介したいと思います。