Apache Solr Hello Worldの例
Apache Solr
は、Apache Software Foundationのエンタープライズリアルタイム検索と分析エンジンサーバーをベースとするオープンソースのREST-APIです。それはコアの検索機能であり、Apache Lucene Frameworkを使用して構築され、いくつかの便利で便利な機能が追加されています。これはJava言語で書かれています。
SOLRは、複製を使用してLuceneを検索することの略です。主な機能は索引付けと字句付けです。
ElasticSearch
のように、ドキュメントベースのNoSQLデータストアでもあります。
ヒットハイライト
-
関連する結果
-
Apache Lucene Inverted Indexを使用してドキュメントのインデックスを作成します。
-
推奨事項とスペル候補をサポート
-
オートコンプリートをサポート
-
Suppots地理空間検索
-
RESTベースのAPI(HTTP経由のJSON)をサポート
-
リアルタイム検索と分析をサポート
-
Solrの最新バージョン(バージョン5.x以降)は、Distributedと
クラウドテクノロジー。
-
書かれているとおり、クロスプラットフォーム機能をサポートしています。
-
認証と承認のための組み込みセキュリティ
-
ストリーミングをサポート
-
Apache Solrのメリットまたは利点: – **
-
オープンソース
-
非常に便利な管理インタフェースを備えています。
-
REST APIによる軽量化
-
非常に高速でシンプルで強力で柔軟な検索エンジンです
-
ElasticSearchとは異なり、JSON形式だけでなく、他の便利な機能もサポートしています
HTTP、XML、PHP、Ruby、Python、XSLT、Velocity、カスタムJavaバイナリ出力フォーマットもサポートしています。
-
高可用性。容易かつ高スケーラブル。堅牢でフォールトトレラントな
信頼性の高い検索エンジン。
-
スキーマフリーのデータストア。ただし、必要に応じて、
私たちのデータをサポートします。
-
Apache Lucene Inverted Indexのために高速検索パフォーマンス。
-
構造化データとUN構造化データの両方をサポート
-
分散、シャーディング、レプリケーション、クラスタリング、マルチノードをサポート
建築
** バルク操作をサポート
-
簡単に新しいプラグインで拡張可能
-
キャッシングデータをサポート
-
BigData環境に役立ちます
-
ElasticSearchとは異なり、MapReduceアルゴリズムをサポートしています
-
Apache Solrの欠点や制限: – **
-
プライマリデータストアとしては役に立たない。セカンダリデータとしてのみ役立つ
格納。
-
ACIDに準拠していないデータストア
-
トランザクションと分散トランザクションはサポートしていません
-
ジョインと複合クエリをサポートしていない
-
正規化されたデータを扱うのには役に立たない
-
Apache Solrを使用している人気のあるクライアント: – **
-
CNET、Krugle、M TV
-
Flipkart.com、Sourceforge.net、guardian.co.uk
-
eBay、digg
-
インスタグラム
-
AT&Tインタラクティブ
-
ゴールドマン・サックス
-
AOL Music、AOL Travel、AOL YellowPages
-
ディズニー
-
アップル社。
-
より多くのクライアントはこれを参照しています
Cloudera、Hortonworks、MapRなどの人気のあるHadoopディストリビューションでは、内部的にApache Solrを使用して検索機能をサポートしています。
-
注意** わかっているように、Apache SolrはJavaで書かれています。したがって、システムパスにJava/JREを使用する必要があります。 Java環境を正しくインストールして設定してください。 Apache Solr 5.xにはJava 7以降が必要です。 Apache 6.xではJava 8以降が必要です。
Apache Solrは次の2つの方法で使用できます。
-
スタンドアロンApache Solrサーバー
-
クラウドおよび分散Apache Solrサーバー
このチュートリアルでは、例を示すためにStandalone
Apache Solr Server v6.4.2
を使用します。
-
注意** 初期バージョンのApache SolrはColud機能をサポートしていません。 Apache Solr 4.0以降では、SolrCloudコンポーネントを使用してCloudをサポートしています。
1. Apache Solrをローカルにインストールする
スタンドアロンApache Solr ServerをWindows、Linuxベース(Ubuntuのような)またはMac OS環境でローカルに設定するには、以下の手順に従ってください。
-
注意** 最新のApache Solrをダウンロードするには、http://lucene.apache.org/solr/mirrors-solr-latest-redir.htmlを参照してください。[公式ダウンロードリンク]
1.1
Windows環境
-
Apache Solrの最新バージョンをダウンロードする
-
ローカルファイルシステムへのzipファイルの抽出
-
環境変数の設定
PATH=${SOLR__HOME}\bin
1.2
LinuxまたはMac環境
-
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.ローカルでApache Solrを起動/停止する
いくつかのコマンドはApache Solr Serverを操作します。
-
2.1 Apache Solr ** +の状態を確認するSolrサーバを起動する前に、以下の “status”コマンドを実行して状態を確認してください。
cd solr-6.4.2 $ ./solr status No Solr nodes are running.
-
2.2 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 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 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!
-
注意** このチュートリアルでLinux(Ubuntu)OSを使用する予定であるため、私は `./solr start`のようなコマンドを使用しました。 Windows OSを使用している場合は、jsut `solr start`を使用してください。
3. Apache Solrの用語
重要なElasticSearch用語については、「Solr Core」、「Solr Core」、「Indexing」、「Document」、「Field」などについてはほとんど議論しません。
-
3.1 Solrインスタンスとは
+ Apache Solrでは、SolrインスタンスはJVMで実行されるSolrのインスタンスです。スタンドアロンモードでは、Solrには1つのインスタンスのみが含まれ、クラウドモードでは1つまたは複数のインスタンスが含まれます。 -
3.2 Solr Coreとは?** + Apache Solrでは、Solr Coreは単に “Core”とも呼ばれます。コアとは、すべての文書で使用可能なテキストとフィールドの索引です。 1つのSolrインスタンスには、1つ以上のSolrコアを含めることができます。 +言い換えれば、Solr Core = Apache Lucene Index + Solr設定のインスタンス(solr.xml、solrconfig.xmlなど)
PS: – Apache Solrは次の重要な設定ファイルを使います:
-
solr.xml
-
solrconfig.xml
-
core.properties
Schama Based ArchitectureとしてApache Solrを試したい場合は、Apache Solrのドキュメントを参照してください。
-
3.3インデックスとは何ですか?** Apache LuceneやSolrでは、IndexingはDocumentのコンテンツをSolr Indexに追加する技術で、簡単に検索できます。 Apache SolrはApache Lucene Inverted Indexテクニックを使用して、そのドキュメントのインデックスを作成します。
そのため、Solrは非常に高速な検索機能を提供しています。
-
3.4ドキュメントとは?** Apache Solrでは、ドキュメントはフィールドとその値のグループです。
ドキュメントはApache Coreに格納されるデータの基本単位です。 1つのコアに1つ以上のドキュメントを含めることができます。
-
3.5フィールドとは?** Apache Solrでは、フィールドはドキュメントに格納される実際のデータです。それは鍵です
覚えておくべき重要な点:
-
Apache Solr Standalone ArchitectureにはSolrインスタンスが1つしかありません。
Solr Cloud Architectureにはより多くのインスタンスがあるためです。
-
Apache SolrはSolrCloudテクノロジを使用してCloud Architectureをサポートします。
-
各Solrインスタンスは、0個以上のコアを持つことができます。
-
各コアには、0個以上のドキュメントを含めることができます。
-
各ドキュメントには0個以上のフィールドを含めることができます。
-
各ファイルにはKey:Valueのペアが含まれます。 KeyはFiledの名前で、
値はフィールドのデータです。
-
注意** このチュートリアルはApache Solrスタンドアロンモードのみを対象としているため、SolrCloud Terminologyについては説明しません。
4. Apache Solr管理コンソール
ElasticSearchとは異なり、Apache SolrにはWebインターフェイスまたは管理コンソールがあります。
これはApache Solrの利点の1つです。 Solrの管理者やプログラマは、Solrの設定の詳細を表示したり、クエリを実行したり、ドキュメントのフィールドを分析してSolrの設定などを微調整することができます。
Apache Solrを起動したら、次の方法で管理コンソールにアクセスできます。
リンク://wp-content/uploads/2017/04/apache
solr
admin
console.png[
]
上の図に示されているように、当初Apache Solrにはコアがないため、左側のパネルに「コアがありません」と表示されています。
この管理コンソールを使用することができます:
-
コアの作成、更新、削除(アンロード)、およびコアの表示
-
ドキュメントの作成、更新、削除、表示
-
Apache Solrの設定
-
ロギング情報
-
監視情報
5. “helloworld” Apache Solrコアを作成する
Apache CoreのCRUDやCRUDのようなApache Solrの操作を行うことができます。ドキュメントやフィールドでは次のような使い方ができます。
-
Apache Solr Comamnds
-
管理コンソール
-
REST API
-
CURLコマンド
まず、コアを使用するコマンドを作成し、管理コンソールで表示する方法について説明します。
これらのコマンドを実行する前に、 “solr start”コマンドを使用してApache Solrを起動してください。以下に示すように、 “create”コマンドを使ってApache Coreを作成することができます:
コマンド構文を作成する: –
$ ./solr create -c <SOLR__CORE__NAME>
ここで、 “create”コマンドはCoreを作成するために使用され、 “-c”オプションはSolr Core Nameを指定します。
コマンドの作成例: –
$ ./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” Queryパラメータは “CREATE”操作を指定し、nameはコア名を定義し、instanceDirはディレクトリ名を指定します。 nameとinstanceDirの両方を同じか違うことができます。
このコマンドを実行した後、管理コンソールを更新すると、左側のパネルに[使用可能なコアがありません]が表示されません。これで「コアセレクタ」オプションが表示されます。それをクリックすると、ドロップダウンボックスに “helloworld”コアが表示されます。そのコアを選択すると、左側のパネルにすべての情報が表示されます。また、ドロップダウンボックスの下に別のオプションが表示されます。
-
概要
-
書類
-
クエリ
また、以下に示すように `$ {SOLR__HOME}/server/solr/`の下に “helloworld”というフォルダを作成します:
リンク://wp-content/uploads/2017/04/helloworld
core.png[
必要なフォルダ名でApache Coreを作成するには
コマンドの作成例: –
$ ./solr create -c helloworld -d myhellowolrd
ここでは、 “helloworld”コアがフォルダ名 “myhellowolrd”で作成されます。
6.コアにドキュメントを追加/更新/インポートする
「helloworld」コアを作成したばかりなので、空です。ドキュメントやデータは含まれません。 Apache Solr管理コンソールの「ドキュメント」オプションを使用して、このコアにドキュメントを追加/更新/インポートすることができます。
JSON、XML、Binaryなどのさまざまな形式で直接コンテンツを使用するか、FileUploadオプションを使用してドキュメントを直接ドキュメントとしてアップロードすることでドキュメントを追加できます。
“helloworld”コアにファイルを追加する
-
Solr管理コンソールにアクセスする:
http://localhost:8983/solr/
-
“Core Selector”オプションをクリックし、 “helloworld”コアを選択
ドロップダウンボックス。
-
“ドキュメント”オプションをクリック
-
“Request-Handler”を観察すると、 “/update”が表示されます
コアでドキュメントを更新する
** ドキュメントで、[ファイルを選択]オプションをクリックします
-
$ \ {SOLR__HOME}/example/films/から “films.json”を選択してください。
-
“Submit Document”ボタンをクリックしてください。
リンク://wp-content/uploads/2017/04/documents
fileupload.png[
]
`films.json`ファイルに利用可能なデータを含むドキュメントを作成します。 xml、csvなどのファイルを使って同じことができます。
7.コアからのクエリ文書
Apache Coreからドキュメントを照会するには、REST APIまたはAdmin Consoleを使用できます。
今度はApache Admin Consoleを使って調べてみましょう。
-
Solr管理コンソールにアクセスする:
http://localhost:8983/solr/
-
“Core Selector”オプションをクリックし、 “helloworld”コアを選択
ドロップダウンボックス。
-
左側のパネルから[クエリ]をクリックします
-
“Request-Handler”を観察すると、 “/select”が表示されます
コアからドキュメントを選択または取得します。
-
右側のpannelから「Execute Query」ボタンをクリック
-
“helloworld”コアから利用可能なすべてのドキュメントを取得します。
リンク://wp-content/uploads/2017/04/solr
query
all.png[
次の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
リンク://wp-content/uploads/2017/04/query
by
director
name.png[
ここでは、このクエリdirected__by = “Gary Lennon”に一致するすべてのData from Films Documentを取得しました。あなたがSQLをよく使っているなら、このクエリを次のSQL SELECTコマンドに変換することができます。
SELECT ** FROM FILMS WHERE directed__by="Gary Lennon"
リンク://wp-content/uploads/2017/04/query
by
dir
name
for
genere
field.png[
次の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コマンドを使用して、CURLコマンドの例もカバーするDELETE操作を実行しています。 RESTクライアントなどの他のオプションでこの例を試すことができます。
$ curl http://localhost:8983/solr/helloworld/update/?commit=true -H "Content-Type: application/xml" -d "<delete><query>directed__by:'Zack Snyder'</query></delete>" <?xml version="1.0" encoding="UTF-8"?> <response> <lst name="responseHeader"><int name="status">0</int><int name="QTime">563</int></lst> </response>
9. Apache Solrコアを削除する
“Request-Handler” = “/update”を使用してApache Solr Coreを更新し、ドキュメントに対して追加/更新/削除操作を行うことができます。これを行うには、ブラウザ、管理コンソール、RESTクライアント、またはCURLコマンドでREST APIを使用できます。必要に応じて、Apache Solr Admin Consoleから「Unload」オプションを使用してコアを削除または削除できます。
コアをアンロードするには、以下の手順に従ってください。
-
Solr管理コンソールにアクセスする:
http://localhost:8983/solr/
-
“Core Selector”オプションをクリックして、 “helloworld”コアを選択します。
ドロップダウンボックス。
-
右側のパネルから[アンロード]ボタンをクリックしてください。
-
選択したコアをApache Solrから削除またはアンロードします。
-
Coreフォルダは “server/solr”パスから削除されません。
10.なぜApache Solrですか?なぜApache Luceneではないのですか?
わかっているように、Apache Luceneは一般的な検索エンジンApache SolrとElasticSearchの両方にとって基本的なCore 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はCloudをサポートします
ElasticSearchは真のクラウドと分散アーキテクチャを内蔵し、サポートしています。
-
Apache SolrはApache Zookeepterをクラスタ管理に使用します。
ElasticSearchはこれにZen Discoveryを使用します。
-
ElasticSearchはJSNOベースのREST APIのみをサポートしています。Apache Solr
JSON、XML、Doc、CSV、バイナリなど、より多くのフォーマットをサポートしています。
-
Apache Solrには、ElasticSearchのようにセキュリティのサポートが組み込まれています
持っていない。
-
ElasticSearchは、Apacheとしてのスキーマレスデータストアのみをサポートします
Solrは、スキーマベースとスキーマの両方をサポートしていません。
Apache Solrとリレーショナルデータベースの違い
-
リレーショナルデータベースは、構造化データのみをサポートします。Apache Solr
構造化データと構造化されていないデータの両方。
-
リレーショナルデータベースは正規化されたデータに適しています。Apache Solr
正規化されていないデータに適しています。
-
リレーショナルデータベースには、Apacheとしてデータを格納するためのスキーマが必要です
Solrは、スキーマベースとスキーマの両方をサポートしていません。
-
リレーショナルデータベースは、複雑なクエリと結合をサポートしています。
Solrはそれらをサポートしていません。
-
リレーショナルデータベースはApacheのプライマリデータストアとして使用できます
セカンダリデータストアとしてのSolr