オープンソース

Apache Solr〜データを高速で全文検索するOSS〜

Apache Solrとは、オープンソースの全文検索エンジンです。全文検索システムとは、ファイル内の全ての文字情報を対象とした検索方法です。一回の検索で簡単に検索対象を探すことができるため、非常に便利ですが、検索に時間がかかる、負荷分散が必要になるといった課題があります。
Apache Solrでは、ビッグデータ解析などで使われるApache Luceneをベースに使用しています。また、Apache Solrには、Solr Cloudと呼ばれるクラスタ構成の仕組みが用意されています。これらの利点を活かし、全文検索システムの課題を解決することができます。

このページでは、Apache Solrの機能や特徴について紹介します。

Apache Solrとは

Apache Solrとは、Apacheソフトウェア財団のプロジェクトが管理している、オープンソースの全文検索エンジンです。Apacheコミュニティによって開発が進められています。Apache Solr自体はオープンソースソフトウェアですが、これを利用して、いくつかのソフトウェアが製品化されています。また、Apache Solrは、IoTプラットフォームで利用するコンピュータクラスタ上で、分散解析エンジンとしても活用されています。

また、Apache Solrは、全文検索ライブラリであるApache Luceneをベースとしています。Apache Luceneは、高速で、大量のデータにも耐えられるため、Elasticsearchなど数多くの全文検索エンジンで使用されています。また、プログラミング言語にJavaを使用しているため、WindowsやMacでも使用可能です。

全文検索のメリットとデメリット

全文検索とは、文書ファイルなどの中に含まれた、すべての文字情報を対象とした検索方法です。フルテキストサーチ(Full Text Search)とも呼ばれます。

例えば、ファイル検索を行う際、ファイル名やフォルダ名だけでなく、ファイルやフォルダの中身のテキストについても検索対象となり、一回の検索で全対象を簡単に探すことが可能です。検索方法としては、最も満遍なく検索できる手法と言われています。ファイルサーバだけでなく、メールサーバやデータベース、Googleなどの検索サイトでインターネット上の様々なドキュメントを検索する際にも、全文検索が利用されています。

しかし、全文検索には以下のような欠点もあります。

  • 全文検索に対応したデータベースが必要。一般的なリレーショナルデータベースにも全文検索の機能はあるが、スケーラビリティなどの点では課題が多く、データ量が多い場合には制約がある。
  • ビックデータのようなたくさんの情報がある場合、その中身を逐次的に調べるには膨大な時間がかかる。
  • システムが扱う大量のデータにも耐えられる冗長性が必要。

Apache Solrは、これらの欠点を補うことができる全文検索システムです。

Apache Solrの主な特徴

Apache Solrには以下のような特徴があります。

大容量のデータに対応

Apache Solrでは、ビッグデータ解析などで使われるApache Luceneを全文検索エンジンに使っています。そのため、大量のデータベースにも対応し、高速で検索をすることができます。

ほぼリアルタイムのインデックス作成

全文検索システムで検索を高速に行うためには、主に、形態素解析の機能を用います。形態素解析には、文字列を単語の最小の構成単位に分割する「分かち書き」や、検索対象を単語単位ではなく文字単位に分解する「N-gram方式」などの方法があります。このような形態素解析で索引する文字列を抽出し、インデックスを生成します。Apache Solrでは、このようなインデックス作成やデータ登録を、ほぼリアルタイムで行うことができます。これによって、例えばメールサーバと連携して検索を行う場面では、メールがローカル配送される時に、メールサーバからApache Solrに対してデータを自動的に登録することが可能です。

冗長化の実現

Apache Solrには、Solr Cloudと呼ばれるクラスタ構成の仕組みが用意されています。このクラスタ構成では、Solrを実行するそれぞれのサーバのことをノードと呼びます。Solr Cloudを使うことで、クエリの負荷分散やフェールオーバーなどを実現することができます。また、設定を集中管理することができます。

冗長化の仕組みは以下の通りです。

Apache Solrは、複数の検索対象を持つことができ、一つ一つの検索対象をコレクションと呼びます。 クライアントは、これらのコレクションに対して登録・検索を行います。

コレクションが大きくなり、1つのノードで扱うことができない場合には、シャードという単位に分割して管理を行います。

各シャードには、 シャードをコピーしたレプリカが配置されます。このレプリカをコアと呼びます。コアは、実際の処理の最小単位です。コアはレプリケーションをサポートしていて、複数のコアをレプリケーションすることで冗長構成を取ることができます。

Apache Solrの主な機能

Apache Solrには次のような機能があります。

強力な全文検索機能

Apache Solrは、強力な全文検索機能を提供しています。以下のような機能を使用して、検索結果を表示することができます。

  • フレーズ検索

    検索キーワードを二重引用符(")で囲み、そのキーワードの語順のままで、完全に一致する検索結果を表示することができます。

  • ワイルドカード検索

    ワイルドカードとは、一部不明な文字の代わりに利用する代替文字のことをいいます。オートフィルタ等であいまい検索をするときに使用します。

  • ジョイン操作

    対象となる複数のテーブルを結合して検索することができます。

  • グルーピング

    条件に基づいて、ヒットした検索結果をグループ化して表示することができます。

HTTPを使った登録・検索

Apache Solrへのデータの登録や検索などの操作は、HTTPを使って行います。HTTP上のAPIは、REST-like APIを採用しています。全文検索の対象となるドキュメントの登録および検索結果の出力は、JSON、XML、CSV、バイナリなどの形式に対応しています。

管理者向けGUI

Apache Solrには、Solrコンソールと呼ばれる管理用GUIが付属しており、次のような機能を利用することができます。

  • Solr Cloudの稼働状態の確認
  • コレクションの追加
  • シャードの追加
  • レプリケーションの設定
  • ログの管理
  • データの検索や取得

コンソール管理画面

Solrコンソール管理画面

プラグインによる機能拡張

Apache Solrは、プラグインによってインデックス作成や検索用の機能などを拡張することができます。プラグインもオープンソースであるため、任意でコードを変更することも可能です。

Apache Solrに関連したソフトウェア

Apache Solrとさまざまなソフトウェアと組み合わせて使うことで、全文検索システムをより便利に活用することができます。以下では、連携できるソフトウェアの例をご紹介します。

Kuromojiを使った日本語対応

Kuromojiとは、Javaで書かれたオープンソースの日本語形態素解析エンジンです。KuromojiはApache Software Foundationに寄付されており、Apache Luceneへの日本語のサポートを提供しています。Kuromojiは、複合語の分割、品詞のタグ付け、見出し化、読みの抽出などの機能を提供します。

Apache Solrで日本語の全文検索を行いたい場合には、このKuromojiを利用するのが一般的です。以前は、形態素解析の機能に制限がありましたが、Kuromojiの採用によって、日本語処理も実用レベルに達しています。

Dovecotなどのメールソフトとの連携

Apache Solrは、POP/IMAPサーバと連携することで、IMAPサーバでの全文検索を実現することができます。

例えば、高機能なIMAPサーバとして有名なDovecotには、「FTS」というプラグインが存在します。これは Dovecotで全文検索を実現するためのプラグインです。さらに別のプラグインとして、「FTS-Solr」が存在します。これはDovecotとApache Solrを全文検索のバックエンドとして利用するためのプラグインです。これらのプラグインを導入することで、Dovecotに全文検索の機能を追加することができます。そのため、非常に速い速度でメールの検索ができるようになります。また「FTS-Solr」には、メールの添付ファイルのフィルタリングをする機能があります。この機能を使うことで、例えばPDFの中身をテキストにして、検索インデックスを作ることができます。つまり、メールの本文の検索で、添付ファイルの中身まで検索が行えるようになります。

Thunderbirdなどのメジャーなメールクライアントや、デージーネットで商用サポートを開始したWEBメールのRoundcubeでも全文検索の機能を利用することができます。

また、デージーネットが開発したオープンソースのメールアーカイブシステム「Messasy」でも、Apache Solrを利用しています。MessasyとApache Solrを組み合わせることで、メールアーカイブサーバに保存された過去の大量のメールから、必要なメールを高速で探すことができます。

Apache ZookeeperによるSolr Cloundの管理

Apache Zookeeperとは、負荷分散システムにおいて、設定情報の管理・命名などの機能を提供するオープンソースソフトウェアです。このZookeeperを利用して、Solr Cloundの設定情報を管理することができます。ZookeeperはApache Solrに同梱されていますが、このバージョンではZookeeper自体の冗長性を確保することはできません。Zookeeperの冗長性を確保するためには、Zookeeperを別途インストールし、最小で3台のサーバを用意する必要があります。各サーバが、互いにデータをレプリケーションして保持することで、冗長化を実現します。

このように、他のソフトウェアを組み合わせることで、様々な用途や目的でApache Solrを使うことができます。

デージーネットの取り組み

デージーネットでは、Apache SolrとIMAPサーバのdovecotを使って、IMAPサーバでの全文検索を実現しています。これにより、メールクライアントからの検索が行なわれた時には、自動的に全文検索の機能を利用することができます。 例えば、約20000件、700Mバイトのメールデータのメッセージ全体を選択して検索を行なった場合、全文検索機能がないと35秒もの時間がかかります。一方、Apache Solrの全文検索機能を使った場合には、一秒以内で検索を終了することができます。今後は、インストール方法やより詳しい機能を調査・検証し、資料を公開していく予定です。

また、デージーネットでシステム構築サービスを提供したお客様には、導入後支援サービスとして、Open Smart Assistanceを提供しています。Q&A対応、セキュリティ情報提供、障害調査・回避、障害時オンサイト対応・システム再構築などがあります。これは、ソフトウェア単体のサポートではなく、Linuxなどを含むシステム全体に対するサポートです。

「関連情報の一覧」

Apache Solrによるメール全文検索システム構築事例

構築事例(ApacheSolr)

デージーネットが以前に構築したインターネットサービスプロバイダのメールシステムについて、メールの検索が遅く、検索をするとシステムの負荷も高くなる状態を改善できないかと相談を受け対応した事例です。

デモのお申込み

もっと使い方が知りたい方へ
操作方法や操作性をデモにてご確認いただけます。使い方のイメージを把握したい、使えるか判断したい場合にご活用下さい。デモをご希望の方は、下記よりお申込みいただけます。

デモをご希望の方

デモの申し込みイメージ

Apache Solr〜データを高速で全文検索するOSS〜の先頭へ