Apache Solr Hello Worldの例
Apache Solrは、Apache SoftwareFoundationのオープンソースREST-APIベースのエンタープライズリアルタイム検索および分析エンジンサーバーです。 その中心的な検索機能は、Apache Lucene Frameworkを使用して構築され、いくつかの追加の便利な機能が追加されています。 Java言語で書かれています。
SOLRは、Searching On Lucene w / Replicationの略です。 主な機能はインデックス作成と検索です。 ElasticSearchと同様に、これもドキュメントベースのNoSQLデータストアです。
Note
公式ウェブサイト:http://lucene.apache.org/solr/。 Solrの最新バージョンは6.4.2で、2017年3月7日にリリースされました。
Apache Solrの機能:-
-
オープンソース
-
全文検索とファセットナビゲーション機能をサポート
-
ヒットの強調表示
-
関連する結果
-
Apache Lucene Inverted Indexを使用して、ドキュメントのインデックスを作成します。
-
推奨事項とスペル提案をサポート
-
自動補完をサポート
-
Suppots地理空間検索
-
RESTベースのAPI(JSON over HTTP)をサポート
-
リアルタイム検索と分析をサポート
-
Solrの最新バージョン(バージョン5.x以降)は、DistributedおよびColudテクノロジーをサポートしています。
-
書かれているとおり、クロスプラットフォーム機能をサポートしています。
-
認証と承認のための組み込みセキュリティ
-
ストリーミングをサポート
Apache Solrの利点または利点:-
-
オープンソース
-
非常に便利な管理インターフェイスを備えています。
-
REST APIを使用した軽量
-
非常に高速、シンプル、強力かつ柔軟な検索エンジンです
-
ElasticSearchとは異なり、JSON形式だけでなく、XML、PHP、Ruby、Python、XSLT、Velocity、HTTPを介したカスタムJavaバイナリ出力形式などの便利な形式もサポートしています。
-
高可用性。 簡単で拡張性に優れています。 堅牢でフォールトトレラントで信頼性の高い検索エンジン。
-
スキーマフリーのデータストア。 ただし、必要に応じて、データをサポートするスキーマを作成できます。
-
Apache Lucene Inverted Indexによる高速検索パフォーマンス。
-
構造化データとUNStructuredデータの両方をサポート
-
分散、シャーディング、レプリケーション、クラスタリング、マルチノードアーキテクチャをサポート
-
一括操作をサポート
-
新しいプラグインで簡単に拡張可能
-
データのキャッシュをサポート
-
ビッグデータ環境に有用
-
ElasticSearchとは異なり、MapReduceアルゴリズムをサポートします
Apache Solrの欠点または制限:-
-
プライマリデータストアとしては役に立ちません。 セカンダリデータストアとしてのみ役立ちます。
-
ACID準拠のデータストアではありません
-
トランザクションおよび分散トランザクションをサポートしていません
-
結合と複雑なクエリをサポートしていません
-
正規化されたデータを操作するのに役立ちません
Apache Solrを使用している人気のあるクライアント:-
-
CNET、Krugle、M TV
-
Flipkart.com, Sourceforge.net, guardian.co.uk
-
eBay、digg
-
インスタグラム
-
AT&T Interactive
-
ゴールドマン・サックス
-
AOL Music、AOL Travel、AOL YellowPages
-
ディズニー
-
アップル社。
-
より多くのクライアントがこのlinkを参照しています
Cloudera、Hortonworks、MapRなどの一般的なHadoopディストリビューションは、Apache Solrを内部的に使用して検索機能をサポートしています。
Note
ご存知のように、ApacheSolrはJavaで書かれています。 そのため、システムパスにJava / JREを使用する必要があります。 Java環境を適切にインストールして設定してください。 Apache Solr 5.xにはJava 7以降が必要です。 Apache 6.xにはJava 8以降が必要です。
Apache Solrは2つのフレーバーで使用できます。
-
スタンドアロンApache Solrサーバー
-
クラウドおよび分散Apache Solrサーバー
このチュートリアルでは、スタンドアロンのApache Solr Server v6.4.2を使用して例を示します。
Note
Apache Solrの初期バージョンでは、Colud機能をサポートしていません。 Apache Solr 4.0リリース以降、SolrCloudコンポーネントを使用してクラウドをサポートします。
1. Apache Solrをローカルにインストールする
以下の手順に従って、Windows、Linuxベース(Ubuntuなど)、またはMac OS環境でスタンドアロンApache Solr Serverをローカルにセットアップしてください。
Note
最新のApache Solrをダウンロードするには、このofficial
download linkを参照してください。
1.1 Windows Environment
-
Apache Solrの最新バージョンをダウンロードする
-
zipファイルをローカルファイルシステムに抽出します
-
環境変数を設定する
PATH=${SOLR_HOME}\bin
1.2 Linux or Mac Environment
-
Apache Solrの最新バージョンをダウンロードする
-
zipファイルを抽出する
$ tar -xvf solr-6.4.2.tgz
環境変数を設定する
SOLR_HOME=/home/rambabu/solr-6.4.2
と仮定しましょう
export PATH=${SOLR_HOME}\bin
これで、Apache Solrが正常にインストールされました。
2. Start/Stop Apache Solr Locally
Apache Solr Serverを操作するためのいくつかのコマンド。
2.1 Check Status of Apache Solr
Solrサーバーを起動する前に、次の「status」コマンドを実行してステータスを確認してください。
cd solr-6.4.2 $ ./solr status No Solr nodes are running.
2.2 Start Apache Solr
$ ./solr start Archiving 1 old GC log files to /home/rambabu/solr-6.4.2/server/logs/archived Archiving 1 console log files to /home/rambabu/solr-6.4.2/server/logs/archived Rotating solr logs, keeping a max of 9 generations Waiting up to 180 seconds to see Solr running on port 8983 [\] Started Solr server on port 8983 (pid=24563). Happy searching!
上記の開始コマンドログを観察すると、Apache Solrサーバーがデフォルトのポート番号8983で開始されていることがわかります。 サーバーステータスをすぐに知るために、再び「status」コマンドを実行します。
$ ./solr status Found 1 Solr nodes: Solr process 24563 running on port 8983 { "solr_home":"/home/rambabu/solr-6.4.2/server/solr", "version":"6.4.2 34a975ca3d4bd7fa121340e5bcbf165929e0542f - ishan - 2017-03-01 23:30:23", "startTime":"2017-03-22T15:11:30.804Z", "uptime":"0 days, 0 hours, 5 minutes, 10 seconds", "memory":"35.3 MB (%7.2) of 490.7 MB"}
別のポート番号でApache Solrを起動します
$ ./solr start –p 9000
2.3 Stop Apache Solr
「stop」コマンドを使用してサーバーを停止します
$ ./solr stop Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 24563 to stop gracefully.
2.4 Restart Apache Solr
$ ./solr restart Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 19442 to stop gracefully. Archiving 1 old GC log files to /home/rambabu/solr-6.4.2/server/logs/archived Archiving 1 console log files to /home/rambabu/solr-6.4.2/server/logs/archived Rotating solr logs, keeping a max of 9 generations Waiting up to 180 seconds to see Solr running on port 8983 [\] Started Solr server on port 8983 (pid=19691). Happy searching!
Note
このチュートリアルではLinux(Ubuntu)OSを使用するため、./solr start
などのコマンドを使用しました。 Windows OSを使用している場合は、jsutsolr start
を使用してください。
3. Apache Solrの用語
いくつかの重要なElasticSearch用語について説明します:Solr Core
、Solr Core
、Indexing
、Document
、Field
など。
3.1 What is a Solr Instance?
Apache Solrでは、SolrインスタンスはJVMで実行されているSolrのインスタンスです。 スタンドアロンモードでは、Solrにはインスタンスが1つだけ含まれますが、クラウドモードでは1つ以上のインスタンスが含まれます。
3.2 What is a Solr Core?
Apache Solrでは、Solrコアは単に「コア」とも呼ばれます。 コアは、すべてのドキュメントで使用可能なテキストとフィールドのインデックスです。 1つのSolrインスタンスには、1つ以上のSolrコアを含めることができます。
言い換えると、Solrコア= Apache Lucene Index + Solr構成(solr.xml、solrconfig.xmlなど)のインスタンス
PS:-Apache Solrは次の重要な構成ファイルを使用します。
-
solr.xml
-
solrconfig.xml
-
core.properties
Apache SolrをSchama Based Architectureとして実験する場合は、Apache Solrのドキュメントを参照してください。
3.3 What is Indexing?
Apache LuceneまたはSolrでは、インデックス作成は、ドキュメントのコンテンツをSolrインデックスに追加して、簡単に検索できるようにする手法です。 Apache Solrは、Apache Lucene Inverted Indexテクニックを使用してドキュメントのインデックスを作成します。 そのため、Solrは非常に高速な検索機能を提供します。
3.4 What is a Document?
Apache Solrでは、ドキュメントはフィールドとその値のグループです。 ドキュメントは、Apache Coresに保存されるデータの基本単位です。 1つのコアに1つ以上のドキュメントを含めることができます。
3.5 What is a Field?
Apache Solrでは、フィールドはドキュメントに格納されている実際のデータです。 キーと値のペアです。 キーは、フィールド名と値がそのフィールドデータを含むことを示します。 1つのドキュメントに1つ以上のフィールドを含めることができます。 Apache Solrはこのフィールドデータを使用してドキュメントコンテンツのインデックスを作成します。
覚えておくべき重要なポイント:
-
Apache SolrスタンドアロンアーキテクチャにはSolrインスタンスが1つしかないのに対し、Solrクラウドアーキテクチャにはさらに多くのインスタンスがあります。
-
Apache SolrはSolrCloudテクノロジーを使用してクラウドアーキテクチャをサポートします。
-
各Solrインスタンスには、ゼロ個以上のコアを含めることができます。
-
各コアには、ゼロ個以上のドキュメントを含めることができます。
-
各ドキュメントには、0個以上のフィールドを含めることができます。
-
各フィールドにはキーと値のペアが含まれます。 キーはフィールドの名前であり、値はフィールドのデータです。
Note
このチュートリアルはApache Solrスタンドアロンモードのみを対象としているため、SolrCloudの用語については説明していません。
4. Apache Solr管理コンソール
ElasticSearchとは異なり、Apache SolrにはWebインターフェイスまたは管理コンソールがあります。 これは、Apache Solrの利点の1つです。 Solr管理者およびプログラマーは、Solr構成の詳細を表示し、クエリを実行し、Solr構成を微調整するために文書フィールドを分析するのに役立ちます。
Apache Solrを起動すると、http://localhost:8983/solr/
を使用してその管理コンソールにアクセスできます。
上記の図に示すように、最初はApache Solrにはコアがありません。そのため、左側のパネルに「使用可能なコアがありません」と表示されます。
この管理コンソールを使用できます。
-
コアの作成、更新、削除(アンロード)、および表示
-
ドキュメントの作成、更新、削除、表示
-
Apache Solrの構成
-
ロギング情報
-
監視情報
5. 「helloworld」Apache Solr Coreを作成する
CRUDであるApacheコアやCRUDであるドキュメントやフィールドなどのApache Solr操作は、次の方法で使用できます。
-
Apache Solrコマンド
-
管理コンソール
-
REST API
-
CURLコマンド
まず、コア使用コマンドの作成方法について説明し、管理コンソールで表示します。
これらのコマンドを実行する前に、「solr start」コマンドを使用してApache Solrを起動してください。 次に示すように、「作成」コマンドを使用してApacheコアを作成できます。
コマンド構文の作成:-
$ ./solr create -c
ここで、「作成」コマンドを使用してコアを作成し、「-c」オプションでSolrコア名を指定します。
作成コマンドの例:-
$ ./solr create -c helloworld Copying configuration to new core instance directory: /home/rambabu/solr-6.4.2/server/solr/helloworld Creating new core 'helloworld' using command: http://localhost:8983/solr/admin/cores?action=CREATE&name=helloworld&instanceDir=helloworld { "responseHeader":{ "status":0, "QTime":1636}, "core":"helloworld"}
上記の出力を観察すると、「helloworld」コアが正常に作成されていることがわかります。 「helloworld」コアを作成するために、その出力で次のREST API URLを見ることができます。
http://localhost:8983/solr/admin/cores?action=CREATE&name=helloworld&instanceDir=helloworld
ここで、「action」クエリパラメータは「CREATE」操作を指定し、nameはコア名を定義し、instanceDirはディレクトリ名を指定します。 nameとinstanceDirの両方を同じまたは異なるものを使用できます。
このコマンドを実行した後、管理コンソールを更新しても、左側のパネルに「使用可能なコアがありません」と表示されません。 これで、「Core Selector」オプションが表示されます。 クリックすると、ドロップダウンボックスに「helloworld」コアが表示されます。 そのコアを選択すると、左側のパネルにすべての情報が表示されます。 また、ドロップダウンボックスのすぐ下に別のオプションが表示されます。
-
概要
-
書類
-
問い合わせ
また、以下に示すように、${SOLR_HOME}/server/solr/
の下に「helloworld」フォルダーを作成します。
必要なフォルダー名でApache Coreを作成するには
作成コマンドの例:-
$ ./solr create -c helloworld -d myhellowolrd
ここで、「helloworld」コアは「myhellowolrd」というフォルダー名で作成します
6. Add/Update/Import Documents to Core
「helloworld」Coreを作成したばかりなので、空です。 ドキュメントまたはデータは含まれません。 Apache Solr Admin Consoleの「ドキュメント」オプションを使用して、このコアにドキュメントを追加/更新/インポートできます。
JSON、XML、バイナリなどのさまざまな形式のコンテンツを直接使用するか、FileUploadオプションを使用してファイルを直接ドキュメントとしてアップロードすることにより、ドキュメントを追加できます。
「helloworld」コアにファイルを追加する
-
Solr管理コンソールへのアクセス:
http://localhost:8983/solr/
-
「コアセレクター」オプションをクリックし、ドロップダウンボックスで「helloworld」コアを選択します。
-
「ドキュメント」オプションをクリックします
-
「Request-Handler」を観察します。「/ update」と表示されます。これは、Coreをドキュメントで更新することを意味します。
-
ドキュメントで、「ファイルを選択」オプションをクリックします
-
$ {SOLR_HOME} / example / films /から「films.json」を選択します
-
「ドキュメントの送信」ボタンをクリックします。
films.json
ファイルに利用可能なデータを含むドキュメントを作成します。 xml、csvなどを使用して同じことを行うことができます。 ファイル
7. コアからドキュメントをクエリする
REST APIまたはAdmin Consoleを使用して、Apache Coreからドキュメントをクエリできます。
ここで、Apache Admin Consoleを使用して調査してみましょう。
-
Solr管理コンソールへのアクセス:
http://localhost:8983/solr/
-
「コアセレクター」オプションをクリックし、ドロップダウンボックスで「helloworld」コアを選択します。
-
左側のパネルから[クエリ]をクリックします
-
「Request-Handler」を観察します。「/ select」が表示されます。これは、コアからドキュメントを選択または取得することを意味します。
-
右側のパネルから「クエリの実行」ボタンをクリックします
-
「helloworld」コアから利用可能なすべてのドキュメントを取得します
次のREST API呼び出しを使用して同じ結果にアクセスできます。 ブラウザまたはRESTクライアントで同じ結果が表示されます。
http://localhost:8983/solr/helloworld/select?indent=on&q=*:*&wt=json
ここで、「q」は「データをフィルタリングするためのクエリパラメータ」を表します。 「q = Fieldname:Value」構文を使用します。 ここで、「q =:」はすべてをクエリすることを意味します。 「wt」は「ライタータイプ」または「レスポンスタイプ」を意味します。
次に、いくつかのフィルタリングオプションを使用してクエリを実行します。 このREST APIには、WebブラウザまたはPOSTMAN、Sense、FidlerなどのRESTクライアントからアクセスできます。
http://localhost:8983/solr/helloworld/select?indent=on&q=directed_by:"Gary Lennon"&wt=json
ここでは、Films Documentからすべてのデータを取得しました。これらのクエリは、directed_by =” Gary Lennon”というクエリに一致しています。 SQLが得意であれば、このクエリを次のSQL SELECTコマンドに変換できます。
SELECT * FROM FILMS WHERE directed_by="Gary Lennon"
次のREST API呼び出しを使用して同じ結果にアクセスできます。 ブラウザまたはRESTクライアントで同じ結果が表示されます。
http://localhost:8983/solr/helloworld/select?fl=genre&indent=on&q=directed_by:"Shane Acker"&wt=json
ここで、「fl」は、応答または結果のフィールドリストを表します。 「ジャンル」フィールドのみを取得することに興味があります。 これをSQLクエリに変換します。
SELECT genre FROM FILMS WHERE directed_by="Shane Acker"
同様に、異なるSELECTクエリを試して、データを取得またはフィルタリングしてみてください。
8. Apache Solrドキュメントを削除する
ここでは、directed_by =” Zack Snyder”条件に一致する1つのドキュメントを削除します。 同じ「Request-Handler」=「/ update」を使用します。これは、コアを更新することを意味します。 指定した条件に一致するドキュメントを削除または削除することを意味する「」オプションを使用します。
ここでは、curlコマンドを使用してDELETE操作を実行し、CURLコマンドの例をカバーしています。 RESTクライアントなどの他のオプションを使用して、この例を試すことができます。
$ curl http://localhost:8983/solr/helloworld/update/?commit=true -H "Content-Type: application/xml" -d "" directed_by:'Zack Snyder' 0 563
9. Apache Solr Coreを削除します
「Request-Handler」=「/ update」を使用し、ドキュメントで追加/更新/削除操作を実行することにより、Apache Solr Coreを更新できます。 これを行うには、ブラウザー上のREST API、管理コンソール、RESTクライアント、またはCURLコマンドのいずれかを使用できます。 必要に応じて、Apache Solr Admin Consoleの「アンロード」オプションを使用して、コアを削除または削除できます。
次の手順に従ってコアをアンロードしてください
-
Solr管理コンソールへのアクセス:
http://localhost:8983/solr/
-
「コアセレクター」オプションをクリックし、ドロップダウンボックスで「helloworld」コアを選択します。
-
右側のパネルから「アンロード」ボタンをクリックします。
-
Apache Solrから選択したコアを削除またはアンロードします。
-
「server / solr」パスからCoreフォルダーを削除しません。
10. なぜApache Solrなのか? Apache Luceneを使用しない理由
ご存じのように、Apache Luceneは人気のある検索エンジンであるApache SolrとElasticSearchの両方の基本的なコアAPIです。 ただし、Apache LuceneはプレーンなJava APIであり、Javaベースのアプリケーションにのみ有用です。
ElasticSearchと同様、Apache SolrはApache Lucene APIのラッパーです。 下の図に示すように、Java APIをREST APIとして公開しています。 これで、任意のアプリケーションでこのSearch APIを使用できます。 また、REST APIは非常に柔軟で軽量です。
11. Apache Solr対ElasticSearch対リレーショナルデータベース
知っているように、Apache SolrとElasticSearchはどちらもApache Luceneを使用してコア機能を実装しています。 ほぼ両方が同じ機能をサポートしています。 いくつかの注目すべき類似点:
-
どちらもApache Luceneを内部で使用します。
-
どちらもREST Base APIをサポートしています。
-
どちらもオープンソースの検索エンジンです。
-
BigDataとCloud Technologiesの両方をサポートしています。
-
両方ともクラスタ管理をサポートしています。
-
どちらもセカンダリデータストアとして役立ちます。
-
どちらも、Apache Luceneの転置インデックスを使用して、高速検索機能をサポートしています。
次の違いがあります。
-
Apache Solrはいくつかの外部コンポーネントを使用します:SolrCloudはクラウドと分散アーキテクチャをサポートしますが、ElasticSearchは組み込みであり、真のクラウドと分散アーキテクチャをサポートします。
-
ApacheSolrはクラスター管理にApacheZookeepterを使用しますが、ElasticSearchはこれにZenDiscoveryを使用します。
-
ElasticSearchはJSNOベースのRESTAPIのみをサポートしますが、Apache SolrはJSON、XML、Doc、CSV、Binaryなどのより多くの形式をサポートします。
-
Apache Solrには、ElasticSearchにはないセキュリティサポートが組み込まれています。
-
ElasticSearchはスキーマレスデータストアのみをサポートしますが、ApacheSolrはスキーマベースとスキーマレスの両方をサポートします。
Apache Solrとリレーショナルデータベースの違い
-
リレーショナルデータベースは構造化データのみをサポートしますが、ApacheSolrは構造化データと非構造化データの両方をサポートします。
-
リレーショナルデータベースは正規化されたデータに適していますが、ApacheSolrは非正規化されたデータに適しています。
-
リレーショナルデータベースはデータを格納するためにスキーマを必要としますが、ApacheSolrはスキーマベースとスキーマレスの両方をサポートします。
-
リレーショナルデータベースは複雑なクエリと結合をサポートしますが、ApacheSolrはそれらをサポートしていません。
-
リレーショナルデータベースをプライマリデータストアとして使用でき、ApacheSolrをセカンダリデータストアとして使用できます。