はじめに

昨今、関心のある・なしや得手・不得手はあるものの、パソコンやスマホを扱ったことがない、パソコンやスマホにお世話になっていないという人は、殆どいないでしょう。

パソコンやスマホは、人々の生活に不可欠といえるものであり、人々は毎日何度もそれに触れています。そしてその大多数の人が、「http~」という文字を目にしていると思われます。

しかし、「調べたいことがはっきりとわからなくても、キーワードや関連しそうな言葉を入力するだけで、なぜ一瞬に検索できるのか?」、ということに正しく答えられる人は、それほど多くはありません。

ここでは、私たちが大変便利に使用しているパソコンやスマホに内蔵されているソフトウェアについて、その代表的なApache Solrの内容や使い方をわかりやすく解説し、そのインストール方法を紹介します。

また、Apache Solrと同様、よく利用されているソフトウェアであるElasticsearchについても、Apache Solrとの違いに言及しつつ、わかりやすく解説します。

Apache Solrがどういうものかを知ることで、普段何気なく利用している検索機能などを、より身近なものとして認識することができることと思います。


Apache Solrの基礎

Apache Solrについて解説する前に、最低限知っておくべき用語とその意味について紹介しておきます。


ソースコード(source code)

ソース(source)とは、源、起源、情報源といった意味を持つ単語です。

コード(code)とは、規程、規約、記号、符号化するといった意味を持つ単語であり、IT分野においては、規約によって定められた符号を指すといわれます。

つまり、あるデータそれ自体では何が表現されているかわからないので、ある規則(規約)に従って、それをわかりやすい符号を用いて表現するのです。

よって、ソースコードとはわかりやすい符号、もっというならば人間が理解できる符号(言語)で表現された情報源ということが出来ます。


オープンソース(open source)

オープンソースとは、文字通りオープンにされているソースです。つまり誰にでも公開されている情報源のことです。

またオープンソースソフトウェア(open source software : OSS)とは、ソースコードを一般に公開し、誰もが自由に扱えるようにするという思想に基づいて開発されたソフトウェアのことです。


全文検索(full-text search)

文書から文字を検索する方法のひとつであり、複数の文書から、そこに含まれる検索文字を探すことができます。文書全体を対象に検索文字を調べることが出来るため、網羅性に優れています。

しかし場合によっては、情報量過多により、求めている情報を得にくいという事態が生じることがあります。


クエリ(query)

クエリ(query)とは質問する、尋ねるという意味を持つ単語です。

コンピュータの分野では、データベースに対する検索要求と訳されることがあります。

つまり、データの更新や削除などの要求は、クエリを通じてデータベースに送信されます。

簡潔に表現するならば、クエリはデータベースに対して、「~してほしい」といった要求を伝える伝達者(conveyor)です。

たとえば、倉庫におけるピッキング作業を想像してみてください。

倉庫にある様々な物の中から、指示書に基づいて必要な物を探します。倉庫がデータベースに相当します。そして、ピックする物の指示を出す、あるいは指示書をピックする人に渡すのがクエリというイメージです。


ファセットナビゲーション(facet navigation)

ファセット(facet)とは、物事のひとつの側面や相という意味を持つ単語です。

たとえば、何かを検索するときは様々な検索方法が考えられますが、その中で「この側面から検索した方がいいのではないか?」というかじ取りをして最適な絞り込みに導いてくれる機能、それがファセットナビゲーションです。

よく例として挙げられるのが、書物の検索です。

たとえばある著者の書籍を検索する際、多すぎて探し出すのに時間がかかるということがあります。そのときに、ジャンルを提示してもらえると絞り込みが容易になることがあります。

そういった機能がAmazonなどのネット通販に用意されていることが多いです。


Apache Solrとは

Apache SolrはApache projectが開発し、公開しているオープンソース(open source)の全文検索ソフトウェアであり、単にSolrと表記されることもあります。

基本的な機能は、ローカルにある文書ファイルからキーワードを含む文書を検索することです。

Javaベースのオープンソース検索エンジンであり、他のシステムやツールとの組み合わせ次第でグーグルのようなウェブ検索も可能になります。

また中核部分の検索エンジンには、ルシーネ(Lucene)が使われています。

ルシーネは、Apache Solrと同じApache projectによって開発されたのもです。ルシーネの詳細については、後述します。


Apache HTTP Serverについて

まず、HTTPサーバは、ウェブサーバとも表記されます。

HTTPサーバは、利用者のブラウザにデータを提供するコンピュータのことです。

Apache HTTP Serverは、Apacheソフトウェア財団(Apache Software Foundation)が開発したウェブサーバ(HTTPサーバ)のひとつであり、世界的に最も普及しているサーバです。


ルシーネ(Lucene)について

Apache Solrの中核をなす検索エンジンにルシーネが使われていることを述べました。

ルシーネは、Apacheソフトウェア財団の開発プロジェクトのうち主にJavaをベースにした開発をしているプロジェクト(ジャカルタプロジェクト:Jakarta Project)によって開発された検索エンジンです。

Apache Luceneと表記されることもあります。

ルシーネそれ自体は完結したプログラムではなくライブラリ(library)ですが、APIを用いることで比較的容易に、全文検索プログラムを作ることが出来ます。

API(Application Programming Interface)とは、あるソフトウェア上の機能や管理データなどを外部から呼び出すときの形式や手順を定めた規約です。

Javaがプログラミング言語として使われているために、WindowsでもMacでも使用可能です。

速度が速いことでも知られ、機能も充実しています。

よってルシーネを使用している検索エンジンは多数ありますが、そのうちのひとつとして、次にエラスティックサーチ(Elasticsearch)について紹介します。


エラスティックサーチ(Elasticsearch)について


Elasticsearchとは

Elasticsearchは、Elastic社が開発し、公開しているオープンソースの全文検索エンジンです。

Elasticsearchも、Apache Solr同様、ルシーネを使用しています。Webサービスの提供スピードが高速であることで注目されています。


Elasticsearchの特徴

Elasticsearchは、データベース管理システムとして世界中で広く使用されているOracle社が開発しているリレーショナルデータベース管理システム(RDBMS)や、マイ・エスキューエル(MySQL)に比して、より高速で複雑な検索が可能です。

RDBMSやMySQLも、世界中で利用され、利用順位は常に上位を占めていますが、Elasticsearchは、それ以上に、提供されるWebサービスの充実とスピードが注目されています。

またわかりやすい検索機能にも定評があり、大規模検索、たとえばショッピングサイトから目当てのものを探すシステムや、大量の文献からキーワードや関連事項によって目的の文献を探すといったシステムを構築する機能に優れているとされています。


Apache SolrとElasticsearch

共通点

先述したように、どちらもプログラミング言語にJavaを使用しています。

Javaが持つ汎用性の恩恵を双方共受けており、他のシステムやツールとの組み合わせで多角的な利用が可能になることは、Apache SolrやElasticsearchのみならず、Javaを使用している検索エンジン共通の利点です。

また、Apache Luceneを中核エンジンとして使用していることも両者の共通点ですが、これもこの両者のみだけに共通しているというものではありません。

このように、プログラミング言語も中核エンジンも共通の両者は、どこにその違いが生じているのでしょうか。次に、両者の違いについて解説します。


相違点

いくつかある相違点の中で特筆すべきは、検索クエリです。クエリについては先述しましたが、データベースに検索、更新及び削除などの要求を伝える役割を担っています。

Apache Solrのクエリは、データベースに要求を送信する際のパラメータが多様であることが特徴的だといわれます。

パラメータは、変数、設定値などといった意味を持つ単語です。プログラミングの分野においては、検索要求を伝え、あるいはデータベースから呼び出した値を受け取る変数をいいます。

パラメータが多様であるということは、様々な要求方法が可能であることを意味します。

またクエリ文字列を使用することにより、わかりやすいクエリの作成が出来ることも、Apache Solrの特徴として挙げられます。

これに対しElasticsearchのクエリは、クエリDSLを提供しています。

クエリDSLは、クエリを記述するためにテキストベースのデータフォーマットを使用しています。これにより、構造的なクエリや複雑なクエリの作成が可能になるとされています。

以上より、Apache Solrはわかりやすいクエリが作成できますが、複雑なクエリの作成には適さないのに対し、Elasticsearchでは習得に時間を要するものの、複雑で構造的でより高度なクエリの作成が可能です。


Apache Solrのインストール

ここでは、Windowsでのインストールについて解説します。


Javaのインストール

まず、Apache Solrの実行に、Javaが必要になるため、Java環境のインストールを行います。

Windowsでのインストールはオンラインとオフラインがありますが、オンラインでのインストールについて解説します。

Javaのダウンロードサイトにて、Windowsオンラインを選択します。

インストールが完了した後、環境変数JAVA_HOMEの設定を行います。

システム>システムのプロパティ>詳細設定>環境変数でJAVA_HOME環境変数を追加します。

変数は、JAVA_HOMEで、値は、バージョンが1.8.0_241の場合、C:\Program Files\Java\jdk1.8.0_241となります。


Apache Slorのインストール

次に、Apache Solrをインストールします。

まず、http://lucene.apache.org/solrにアクセスし、右上にあるDOWNLOADをクリックします。

そうすると、Apache Download Mirrorsページが表示されますので、HTTPやFTPのいずれかのリンクをクリックします。

そして、その中にあるsolr-8.4.1.zipまたはsolr-8.4.1.tgzのいずれかを選択してダウンロードしますが、Windowsの場合は、zipファイルの選択が推奨されます。

Zipファイルを解凍すると、solr-8.4.1という名前のサブディレクトリが展開されます。


Apache Solrの使い方


Apache Solrの起動

6の準備を終えたら、Apache Solrを起動させてみます。

まず、solr-8.4.1を展開すると、solr.cmdがありますので、startコマンドで起動します。

起動すると、コンソールに様々なメッセージが出ます。警告が出ることがありますが、起動自体はされています。


管理画面の表示

次に、正しく起動しているか確認するために、http://localhost:8983/solr/にアクセスします。Solrの管理画面が表示されれば、正しく起動しています。


Apache Solrを使ってみよう

まずhttp://localhost:8983/solr/にアクセスして、Solrの管理画面を開きます。

何も登録されていない場合、Num Docs:0になっています。そこで、サンプルのドキュメントを追加します。

ドキュメントを追加するには、addコマンドを送信します。たとえば、以下のようなドキュメントを追加してみます。

  1. <add>
  2. <doc>
  3. <field name=”dog”>picture</field>
  4. <field name=”dog”>black-and-white film</field>

このように二つのドキュメントを追加すると、Num Docs:2に変わります。

  • 登録したドキュメントの検索

次に、登録したドキュメントを検索してみます。

Solrの管理画面を表示します。左側のメニューにあるセレクトボックスから、techproductsを選択して、その下のメニューにあるQueryをクリックします。

パラメータは、qには検索ワードを、wtにはxmlやcsvなどの出力フォーマットを入れます。

そして、画面下部にあるExecute Query をクリックします。その結果、画面右側にJSON形式の検索結果が表示されます。また、curlを使用する場合は、以下にアクセスします。

  1. $ curl”http://localhost:8983/solr/techproducts/select?q=book&wt=xml&indent=true”


使用例

Apache Solrは、上述のように、中核部分にApache LuceneというJavaで書かれた検索エンジンが使用されている、オープンソースの全文検索ソフトウェアです。

オープンソースではあるものの、かなりの高性能であることが知られています。

よくいわれていることは、Apache Solrがもつファセット検索機能は様々な側面から情報群を切っていくことを可能にするため、検索結果の絞り込みなどに威力を発揮するということです。

また、地理空間検索機能も優れています。ある地点から目的地までの距離が簡単に検索できることもよく知られた機能です。たとえば、ある地点から何キロ圏内にあるレストランを調べることも容易です。

さらに、全文検索の強力性、多様なファイル、データなどを一元化する機能や高速性により、図書館の文献検索等にも利用されています。


おわりに

ここ数年、コンピュータに関わるものソフトウェア、エンジン、アプリ等々の進歩は目覚ましくアップデートのタームは短くなる一方です。

今回見てきたApache SolrとElasticsearchの2つをとってみても、後発のElasticsearchが様々な機能でApache Solrに後れをとっていましたが、あっという間にElasticsearchの利用が増え、Apache Solrを抜き去ったという記事が出ました。

パソコンやスマホなどは、使い方もよく利用する機能も人それぞれです。

そして、ソフトウェアや検索エンジンなども、人によって使いやすいもの使いにくいものがあります。

今回はApache Solrについて解説しましたが、自身のライフスタイルに合ったソフトウェアを見つけ、使いこなしていくことにより、仕事や生活の質の向上につながるものと思います。


toiroフリーランスは、SHIFTグループがプライムとして参画している独自案件をフリーランスエンジニア向けに紹介する唯一のプラットフォームサービスです。

エージェントによるサポートもありますので、ご利用を検討してみてはいかがでしょうか。