Apache-solr-quick-guide

提供:Dev Guides
移動先:案内検索

Apache Solr-概要

*Solr* は、*検索アプリケーション*の構築に使用されるオープンソースの検索プラットフォームです。 *Lucene* (全文検索エンジン)の上に構築されました。 Solrはエンタープライズ対応で、高速で拡張性に優れています。 Solrを使用して構築されたアプリケーションは洗練されており、高いパフォーマンスを提供します。

2004年にCNET Networksの会社のWebサイトに検索機能を追加するためにSolrを作成したのは Yonik Seely でした。 2006年1月、Apache Software Foundationの下でオープンソースプロジェクトになりました。 最新バージョンのSolr 6.0は2016年にリリースされ、並列SQLクエリの実行をサポートしています。

SolrはHadoopと一緒に使用できます。 Hadoopは大量のデータを処理するため、Solrはこのような大規模なソースから必要な情報を見つけるのに役立ちます。 検索だけでなく、Solrは保存目的にも使用できます。 他のNoSQLデータベースと同様に、これは*非リレーショナルデータストレージ*および*処理技術*です。

要するに、Solrは、大量のテキスト中心のデータを検索するように最適化された、スケーラブルですぐに展開できる検索/ストレージエンジンです。

Apache Solrの機能

SolrはLuceneのJava APIのラップです。 したがって、Solrを使用すると、Luceneのすべての機能を活用できます。 Solrの最も顕著な特徴のいくつかを見てみましょう-

  • Restful API -Solrと通信するには、Javaプログラミングスキルは必須ではありません。 代わりに、安らかなサービスを使用して通信できます。 XML、JSON、.CSVなどのファイル形式でSolrにドキュメントを入力し、同じファイル形式で結果を取得します。
  • 全文検索-Solrは、トークン、フレーズ、スペルチェック、ワイルドカード、オートコンプリートなどの全文検索に必要なすべての機能を提供します。
  • エンタープライズ対応-組織のニーズに応じて、Solrはスタンドアロン、分散、クラウドなど、あらゆる種類のシステム(大規模または小規模)に展開できます。
  • 柔軟で拡張可能-Javaクラスを拡張し、それに応じて構成することにより、Solrのコンポーネントを簡単にカスタマイズできます。
  • * NoSQLデータベース*-Solrは、クラスターに沿って検索タスクを分散できるビッグデータスケールのNOSQLデータベースとしても使用できます。
  • 管理インターフェイス-Solrは使いやすく、使いやすい、機能を備えたユーザーインターフェイスを提供します。これを使用して、ログの管理、ドキュメントの追加、削除、更新、検索などの可能なタスクをすべて実行できます。
  • 高度にスケーラブル-SolrをHadoopで使用しながら、レプリカを追加することで容量を拡張できます。
  • テキスト中心および関連性順に並べ替え-Solrは主にテキストドキュメントの検索に使用され、結果はユーザーのクエリとの関連性に従って順番に配信されます。

Luceneとは異なり、Apache Solrでの作業中にJavaプログラミングのスキルは必要ありません。 Luceneが提供していないオートコンプリート機能を備えた検索ボックスを作成するための、すぐに展開できるすばらしいサービスを提供します。 Solrを使用すると、大規模(ビッグデータ)アプリケーション向けに、インデックスのスケーリング、配布、管理を行うことができます。

検索アプリケーションのLucene

Luceneは、シンプルでありながら強力なJavaベースの検索ライブラリです。 任意のアプリケーションで使用して、検索機能を追加できます。 Luceneは、実質的にあらゆる種類のテキストのインデックス作成と検索に使用される、スケーラブルで高性能なライブラリです。 Luceneライブラリは、 IndexingSearching など、検索アプリケーションに必要なコア操作を提供します。

膨大な量のデータを含むWebポータルがある場合、膨大なデータのプールから関連情報を抽出するために、おそらくポータルに検索エンジンが必要になります。 Luceneは、検索アプリケーションの中心として機能し、インデックス作成と検索に関する重要な操作を提供します。

Apache Solr-検索エンジンの基本

検索エンジンとは、ウェブページ、ニュースグループ、プログラム、画像などのインターネットリソースの巨大なデータベースを指します。 World Wide Web上の情報を見つけるのに役立ちます。

ユーザーは、キーワードまたはフレーズの形式でクエリを検索エンジンに渡すことにより、情報を検索できます。 次に、検索エンジンはデータベースを検索し、関連するリンクをユーザーに返します。

Google検索

検索エンジンのコンポーネント

一般的に、以下にリストされているように、検索エンジンの3つの基本的なコンポーネントがあります-

  • Web Crawler -Webクローラーは、 spiders または bots とも呼ばれます。 Webを横断して情報を収集するソフトウェアコンポーネントです。
  • データベース-Web上のすべての情報はデータベースに保存されます。 膨大な量のWebリソースが含まれています。
  • 検索インターフェイス-このコンポーネントは、ユーザーとデータベース間のインターフェイスです。 ユーザーがデータベースを検索するのに役立ちます。

検索エンジンはどのように機能しますか?

以下の操作の一部またはすべてを実行するには、検索アプリケーションが必要です。

Step Title Description
1 Acquire Raw Content The very first step of any search application is to collect the target contents on which search is to be conducted.
2 Build the document The next step is to build the document(s) from the raw contents which the search application can understand and interpret easily.
3 Analyze the document Before indexing can start, the document is to be analyzed.
4 Indexing the document

Once the documents are built and analyzed, the next step is to index them so that this document can be retrieved based on certain keys, instead of the whole contents of the document.

索引付けは、本の最後にある索引に似ています。一般的な単語がページ番号とともに表示されるため、本全体を検索するのではなく、これらの単語をすばやく追跡できます。

5 User Interface for Search Once a database of indexes is ready, then the application can perform search operations. To help the user make a search, the application must provide a user interface where the user can enter text and initiate the search process
6 Build Query Once the user makes a request to search a text, the application should prepare a query object using that text, which can then be used to inquire the index database to get relevant details.
7 Search Query Using the query object, the index database is checked to get the relevant details and the content documents.
8 Render Results Once the required result is received, the application should decide how to display the results to the user using its User Interface.

次の図をご覧ください。 検索エンジンの機能の全体像を示しています。

検索エンジン

これらの基本的な操作とは別に、検索アプリケーションは、管理ユーザーインターフェイスを提供して、管理者がユーザープロファイルに基づいて検索レベルを制御できるようにします。 検索結果の分析は、検索アプリケーションのもう1つの重要かつ高度な側面です。

Apache Solr-Windows環境で

この章では、Windows環境でSolrをセットアップする方法について説明します。 WindowsシステムにSolrをインストールするには、以下の手順に従う必要があります-

  • Apache Solrのホームページにアクセスして、ダウンロードボタンをクリックします。
  • ミラーの1つを選択して、Apache Solrのインデックスを取得します。 そこから Solr-6.2.0.zip という名前のファイルをダウンロードします。
  • ファイルを* downloadsフォルダー*から必要なディレクトリに移動し、解凍します。

Solrファイルをダウンロードし、Cドライブに展開したとします。 そのような場合、次のスクリーンショットに示すようにSolrを開始できます。

CドライブのSolrファイル

インストールを確認するには、ブラウザで次のURLを使用します。

*http://localhost:8983/*

インストールプロセスが成功すると、以下に示すように、Apache Solrユーザーインターフェイスのダッシュボードが表示されます。

Solr Admin

Java環境の設定

Javaライブラリを使用してApache Solrと通信することもできます。ただし、Java APIを使用してSolrにアクセスする前に、これらのライブラリのクラスパスを設定する必要があります。

クラスパスの設定

*.bashrc* ファイルで *classpath* をSolrライブラリに設定します。 以下に示すように、いずれかのエディターで *.bashrc* を開きます。
$ gedit ~/.bashrc

以下に示すように、Solrライブラリー(HBaseの lib フォルダー)のクラスパスを設定します。

export CLASSPATH = $CLASSPATH://home/hadoop/Solr/lib/*

これは、Java APIを使用してHBaseにアクセスする際の「クラスが見つかりません」例外を防ぐためです。

Apache Solr-Hadoopについて

SolrはHadoopと一緒に使用できます。 Hadoopは大量のデータを処理するため、Solrはこのような大規模なソースから必要な情報を見つけるのに役立ちます。 このセクションでは、Hadoopをシステムにインストールする方法を理解してください。

Hadoopをダウンロードする

以下に、Hadoopをシステムにダウンロードする手順を示します。

  • ステップ1 *-Hadoopのホームページに移動します。 次のリンクを使用できます-https://hadoop.apache.org/[www.hadoop.apache.org/]。 次のスクリーンショットで強調表示されているリンク「リリース」をクリックします。

Hadoopホームページ

次のように、Hadoopのさまざまなバージョンのソースおよびバイナリファイルのミラーへのリンクを含む* Apache Hadoopリリース*ページにリダイレクトされます-

Hadoopリリース

  • ステップ2 *-Hadoopの最新バージョンを選択し(チュートリアルでは2.6.4です)、*バイナリリンク*をクリックします。 Hadoopバイナリのミラーが利用可能なページに移動します。 これらのミラーのいずれかをクリックして、Hadoopをダウンロードします。

コマンドプロンプトからHadoopをダウンロードする

Linuxターミナルを開き、スーパーユーザーとしてログインします。

$ su
password:

次のコードブロックに示すように、Hadoopをインストールする必要があるディレクトリに移動し、以前にコピーしたリンクを使用してファイルをそこに保存します。

# cd/usr/local
# wget http://redrockdigimark.com/apachemirror/hadoop/common/hadoop-
2.6.4/hadoop-2.6.4.tar.gz

Hadoopをダウンロードしたら、次のコマンドを使用して展開します。

# tar zxvf hadoop-2.6.4.tar.gz
# mkdir hadoop
# mv hadoop-2.6.4/* to hadoop/
# exit

Hadoopのインストール

以下に示す手順に従って、 Hadoop を擬似分散モードでインストールします。

ステップ1:Hadoopのセットアップ

次のコマンドを*〜/.bashrc *ファイルに追加することにより、Hadoop環境変数を設定できます。

export HADOOP_HOME =/usr/local/hadoop export
HADOOP_MAPRED_HOME = $HADOOP_HOME export
HADOOP_COMMON_HOME = $HADOOP_HOME export
HADOOP_HDFS_HOME = $HADOOP_HOME export
YARN_HOME = $HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR = $HADOOP_HOME/lib/native
export PATH = $PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL = $HADOOP_HOME

次に、現在実行中のシステムにすべての変更を適用します。

$ source ~/.bashrc

ステップ2:Hadoopの構成

すべてのHadoop設定ファイルは、「$ HADOOP_HOME/etc/hadoop」の場所にあります。 Hadoopインフラストラクチャに応じて、これらの構成ファイルを変更する必要があります。

$ cd $HADOOP_HOME/etc/hadoop

JavaでHadoopプログラムを開発するには、 JAVA_HOME 値をシステム内のJavaの場所に置き換えて、 hadoop-env.sh ファイルのJava環境変数をリセットする必要があります。

export JAVA_HOME =/usr/local/jdk1.7.0_71

以下は、Hadoopを設定するために編集する必要があるファイルのリストです-

  • core-site.xml

  • hdfs-site.xml

  • yarn-site.xml

  • mapred-site.xml

    *core-site.xml*
    *core-site.xml* ファイルには、Hadoopインスタンスに使用されるポート番号、ファイルシステムに割り当てられたメモリ、データを保存するためのメモリ制限、読み取り/書き込みバッファのサイズなどの情報が含まれています。

core-site.xmlを開き、<configuration>、</configuration>タグ内に次のプロパティを追加します。

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:9000</value>
   </property>
</configuration>
*hdfs-site.xml*
*hdfs-site.xml* ファイルには、ローカルファイルシステムのレプリケーションデータの値、 *namenode* パス、 *datanode* パスなどの情報が含まれています。 これは、Hadoopインフラストラクチャを保存する場所を意味します。

次のデータを想定します。

dfs.replication (data replication value) = 1

(In the below given path/hadoop/is the user name.
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.)
namenode path =//home/hadoop/hadoopinfra/hdfs/namenode

(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.)
datanode path =//home/hadoop/hadoopinfra/hdfs/datanode

このファイルを開き、以下のプロパティを<configuration>、</configuration>タグ内に追加します。

<configuration>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>

   <property>
      <name>dfs.name.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/namenode</value>
   </property>

   <property>
      <name>dfs.data.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/datanode</value>
   </property>
</configuration>

-上記のファイルでは、すべてのプロパティ値はユーザー定義であり、Hadoopインフラストラクチャに応じて変更できます。

*yarn-site.xml*

このファイルは、Hadoopに糸を設定するために使用されます。 yarn-site.xmlファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
   </property>
</configuration>
*mapred-site.xml*

このファイルは、使用しているMapReduceフレームワークを指定するために使用されます。 デフォルトでは、Hadoopにはyarn-site.xmlのテンプレートが含まれています。 まず、次のコマンドを使用して、 mapred-site、xml.template から mapred-site.xml ファイルにファイルをコピーする必要があります。

$ cp mapred-site.xml.template mapred-site.xml
*mapred-site.xml* ファイルを開き、<configuration>、</configuration>タグ内に次のプロパティを追加します。
<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

Hadoopインストールの検証

次の手順を使用して、Hadoopのインストールを確認します。

ステップ1:ノードのセットアップに名前を付ける

次のようにコマンド「hdfs namenode –format」を使用して、namenodeをセットアップします。

$ cd ~
$ hdfs namenode -format

期待される結果は次のとおりです。

10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = localhost/192.168.1.11
STARTUP_MSG:   args = [-format] STARTUP_MSG:   version = 2.6.4
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted.
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to retain 1
images with txid >= 0
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11
************************************************************/

ステップ2:Hadoop dfの検証

次のコマンドを使用して、Hadoop dfsを開始します。 このコマンドを実行すると、Hadoopファイルシステムが起動します。

$ start-dfs.sh

予想される出力は次のとおりです-

10/24/14 21:37:56
Starting namenodes on [localhost]
localhost: starting namenode, logging to/home/hadoop/hadoop-2.6.4/logs/hadoop-
hadoop-namenode-localhost.out
localhost: starting datanode, logging to/home/hadoop/hadoop-2.6.4/logs/hadoop-
hadoop-datanode-localhost.out
Starting secondary namenodes [0.0.0.0]

ステップ3:糸スクリプトの検証

次のコマンドを使用して、Yarnスクリプトを開始します。 このコマンドを実行すると、Yarnデーモンが起動します。

$ start-yarn.sh

次のような予想される出力-

starting yarn daemons
starting resourcemanager, logging to/home/hadoop/hadoop-2.6.4/logs/yarn-
hadoop-resourcemanager-localhost.out
localhost: starting nodemanager, logging to/home/hadoop/hadoop-
2.6.4/logs/yarn-hadoop-nodemanager-localhost.out

ステップ4:ブラウザーでHadoopにアクセスする

Hadoopにアクセスするためのデフォルトのポート番号は50070です。 次のURLを使用して、ブラウザーでHadoopサービスを取得します。

*http://localhost:50070/*

Hadoopへのアクセス

HadoopにSolrをインストールする

以下の手順に従って、Solrをダウンロードしてインストールします。

ステップ1

次のリンクをクリックして、Apache Solrのホームページを開きます-https://lucene.apache.org/solr/

Solrホームページ

ステップ2

ダウンロードボタン(上のスクリーンショットで強調表示されている)をクリックします。 クリックすると、Apache Solrのさまざまなミラーがあるページにリダイレクトされます。 ミラーを選択してクリックすると、次のスクリーンショットに示すように、Apache Solrのソースファイルとバイナリファイルをダウンロードできるページにリダイレクトされます。

Apache Mirror

ステップ3

クリックすると、 Solr-6.2.0.tqz という名前のフォルダーがシステムのダウンロードフォルダーにダウンロードされます。 ダウンロードしたフォルダーの内容を抽出します。

ステップ4

以下に示すように、HadoopホームディレクトリにSolrという名前のフォルダーを作成し、抽出したフォルダーの内容をそのフォルダーに移動します。

$ mkdir Solr
$ cd Downloads
$ mv Solr-6.2.0/home/Hadoop/

検証

次のコードブロックに示すように、Solrホームディレクトリの bin フォルダーを参照し、 version オプションを使用してインストールを確認します。

$ cd bin/
$ ./Solr version
6.2.0

ホームとパスの設定

次のコマンドを使用して .bashrc ファイルを開きます-

[Hadoop@localhost ~]$ source ~/.bashrc

次に、Apache Solrのホームディレクトリとパスディレクトリを次のように設定します-

export SOLR_HOME =/home/Hadoop/Solr
export PATH = $PATH:/$SOLR_HOME/bin/

ターミナルを開き、次のコマンドを実行します-

[Hadoop@localhost Solr]$ source ~/.bashrc

これで、任意のディレクトリからSolrのコマンドを実行できます。

Apache Solr-アーキテクチャ

この章では、Apache Solrのアーキテクチャについて説明します。 次の図は、Apache Solrのアーキテクチャのブロック図を示しています。

アーキテクチャ

Solr Architecture─ビルディングブロック

以下は、Apache Solrの主要な構成要素(コンポーネント)です-

  • リクエストハンドラ-Apache Solrに送信するリクエストは、これらのリクエストハンドラによって処理されます。 要求は、クエリ要求またはインデックス更新要求である場合があります。 要件に基づいて、リクエストハンドラを選択する必要があります。 リクエストをSolrに渡すには、通常、ハンドラーを特定のURIエンドポイントにマップし、指定されたリクエストはそれによって処理されます。
  • 検索コンポーネント-検索コンポーネントは、Apache Solrで提供される検索のタイプ​​(機能)です。 スペルチェック、クエリ、ファセット、ヒットの強調表示などです。 これらの検索コンポーネントは、*検索ハンドラー*として登録されます。 複数のコンポーネントを検索ハンドラーに登録できます。
  • クエリパーサー-Apache Solrクエリパーサーは、Solrに渡すクエリを解析し、構文エラーのクエリを検証します。 クエリを解析した後、Luceneが理解できる形式に変換します。
  • 応答ライタ-Apache Solrの応答ライタは、ユーザークエリ用にフォーマットされた出力を生成するコンポーネントです。 Solrは、XML、JSON、CSVなどの応答形式をサポートしています。 応答のタイプごとに異なる応答ライターがあります。
  • Analyzer/tokenizer -Luceneはトークンの形式でデータを認識します。 Apache Solrはコンテンツを分析し、トークンに分割し、これらのトークンをLuceneに渡します。 Apache Solrのアナライザーは、フィールドのテキストを調べ、トークンストリームを生成します。 トークナイザーは、アナライザーによって準備されたトークンストリームをトークンに分割します。
  • 更新要求プロセッサ-Apache Solrに更新要求を送信するたびに、要求はプラグインのセット(署名、ロギング、インデックス付け)で実行されます。これは、集合的に*更新要求プロセッサ*と呼ばれます。 このプロセッサは、フィールドのドロップ、フィールドの追加などの変更を行います。

Apache Solr-用語

この章では、Solrでの作業中に頻繁に使用されるいくつかの用語の本当の意味を理解しようとします。

一般的な用語

以下は、Solrセットアップのすべてのタイプで使用される一般的な用語のリストです-

  • インスタンス-* tomcatインスタンス*または* jettyインスタンス*と同様に、この用語はJVM内で実行されるアプリケーションサーバーを指します。 Solrのホームディレクトリは、これらの各Solrインスタンスへの参照を提供し、各インスタンスで実行するように1つ以上のコアを構成できます。
  • コア-アプリケーションで複数のインデックスを実行しているときに、それぞれが1つのコアを持つ複数のインスタンスの代わりに、各インスタンスに複数のコアを持つことができます。
  • ホーム-$ SOLR_HOMEという用語は、コアとそのインデックス、構成、および依存関係に関するすべての情報を含むホームディレクトリを指します。
  • Shard -分散環境では、データは複数のSolrインスタンス間で分割され、データの各チャンクは Shard として呼び出すことができます。 インデックス全体のサブセットが含まれています。

SolrCloudの用語

前の章で、Apache Solrをスタンドアロンモードでインストールする方法について説明しました。 Solrをマスタースレーブパターンでインストールする分散モード(クラウド環境)でSolrをインストールすることもできます。 分散モードでは、インデックスはマスターサーバー上に作成され、1つ以上のスレーブサーバーに複製されます。

Solr Cloudに関連する重要な用語は次のとおりです-

  • Node -Solrクラウドでは、Solrの各単一インスタンスは node と見なされます。
  • クラスタ-環境のすべてのノードを組み合わせて*クラスタ*を作成します。
  • コレクション-クラスタには、*コレクション*と呼ばれる論理インデックスがあります。
  • シャード-シャードは、インデックスのレプリカを1つ以上持つコレクションの一部です。
  • レプリカ-Solr Coreでは、ノードで実行されるシャードのコピーは*レプリカ*として知られています。
  • リーダー-シャードのレプリカでもあり、Solr Cloudのリクエストを残りのレプリカに配布します。
  • Zookeeper -Solr Cloudが集中管理された構成と調整、クラスターの管理、リーダーの選出に使用するApacheプロジェクトです。

構成ファイル

Apache Solrの主な構成ファイルは次のとおりです-

  • Solr.xml -Solr Cloudに関連する情報を含むのは、$ SOLR_HOMEディレクトリ内のファイルです。 コアをロードするために、Solrはこのファイルを参照して、コアの識別に役立ちます。
  • Solrconfig.xml -このファイルには、要求の処理と応答のフォーマットに関連する定義とコア固有の構成、インデックスの作成、構成、メモリの管理、コミットの作成が含まれます。
  • Schema.xml -このファイルには、フィールドとフィールドタイプとともにスキーマ全体が含まれています。
  • Core.properties -このファイルには、コアに固有の構成が含まれています。 コアの名前とデータディレクトリのパスが含まれているため、コアディスカバリ*と呼ばれます。 任意のディレクトリで使用でき、 coreディレクトリ*として扱われます。

Apache Solr-基本コマンド

Solrの開始

Solrをインストールしたら、Solrホームディレクトリの bin フォルダーを参照し、次のコマンドを使用してSolrを起動します。

[Hadoop@localhost ~]$ cd
[Hadoop@localhost ~]$ cd Solr/
[Hadoop@localhost Solr]$ cd bin/
[Hadoop@localhost bin]$ ./Solr start

このコマンドは、バックグラウンドでSolrを開始し、次のメッセージを表示してポート8983でリッスンします。

Waiting up to 30 seconds to see Solr running on port 8983 [\]
Started Solr server on port 8983 (pid = 6035). Happy searching!

フォアグラウンドでのSolrの開始

*start* コマンドを使用して *Solr* を起動すると、Solrはバックグラウンドで起動します。 代わりに、* – fオプション*を使用してフォアグラウンドでSolrを開始できます。
[Hadoop@localhost bin]$ ./Solr start –f

5823 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader
Adding 'file:/home/Hadoop/Solr/contrib/extraction/lib/xmlbeans-2.6.0.jar' to
classloader
5823 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader
Adding 'file:/home/Hadoop/Solr/dist/Solr-cell-6.2.0.jar' to classloader
5823 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader
Adding 'file:/home/Hadoop/Solr/contrib/clustering/lib/carrot2-guava-18.0.jar'
to classloader
5823 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader
Adding 'file:/home/Hadoop/Solr/contrib/clustering/lib/attributes-binder1.3.1.jar'
to classloader
5823 INFO  (coreLoadExecutor-6-thread-2) [   ] o.a.s.c.SolrResourceLoader
Adding 'file:/home/Hadoop/Solr/contrib/clustering/lib/simple-xml-2.7.1.jar'
to classloader
……………………………………………………………………………………………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………………………………………………………………………….
12901 INFO  (coreLoadExecutor-6-thread-1) [   x:Solr_sample] o.a.s.u.UpdateLog
Took 24.0ms to seed version buckets with highest version 1546058939881226240 12902
INFO  (coreLoadExecutor-6-thread-1) [   x:Solr_sample]
o.a.s.c.CoreContainer registering core: Solr_sample
12904 INFO  (coreLoadExecutor-6-thread-2) [   x:my_core] o.a.s.u.UpdateLog Took
16.0ms to seed version buckets with highest version 1546058939894857728
12904 INFO  (coreLoadExecutor-6-thread-2) [   x:my_core] o.a.s.c.CoreContainer
registering core: my_core

別のポートでSolrを開始する

*start* コマンドの* –pオプション*を使用すると、次のコードブロックに示すように、別のポートでSolrを起動できます。
[Hadoop@localhost bin]$ ./Solr start -p 8984

Waiting up to 30 seconds to see Solr running on port 8984 [-]
Started Solr server on port 8984 (pid = 10137). Happy searching!

Solrの停止

*stop* コマンドを使用してSolrを停止できます。
$ ./Solr stop

このコマンドはSolrを停止し、次のようにメッセージを表示します。

Sending stop command to Solr running on port 8983 ... waiting 5 seconds to
allow Jetty process 6035 to stop gracefully.

Solrの再起動

Solrの restart コマンドは、Solrを5秒間停止し、再び開始します。 次のコマンドを使用してSolrを再起動できます-

./Solr restart

このコマンドはSolrを再起動し、次のメッセージを表示します-

Sending stop command to Solr running on port 8983 ... waiting 5 seconds to
allow Jetty process 6671 to stop gracefully.
Waiting up to 30 seconds to see Solr running on port 8983 [|]  [/]
Started Solr server on port 8983 (pid = 6906). Happy searching!

Solr─ヘルプコマンド

Solrの help コマンドを使用して、Solrプロンプトとそのオプションの使用状況を確認できます。

[Hadoop@localhost bin]$ ./Solr -help

Usage: Solr COMMAND OPTIONS
   where COMMAND is one of: start, stop, restart, status, healthcheck,
create, create_core, create_collection, delete, version, zk
Standalone server example (start Solr running in the background on port 8984):
   ./Solr start -p 8984
SolrCloud example (start Solr running in SolrCloud mode using localhost:2181
to connect to Zookeeper, with 1g max heap size and remote Java debug options enabled):
   ./Solr start -c -m 1g -z localhost:2181 -a "-Xdebug -
   Xrunjdwp:transport = dt_socket,server = y,suspend = n,address = 1044"
Pass -help after any COMMAND to see command-specific usage information,
such as: ./Solr start -help or ./Solr stop -help

Solr─statusコマンド

Solrのこの status コマンドは、コンピューターで実行中のSolrインスタンスを検索および検索するために使用できます。 バージョン、メモリ使用量など、Solrインスタンスに関する情報を提供できます。

次のようにstatusコマンドを使用して、Solrインスタンスのステータスを確認できます-

[Hadoop@localhost bin]$ ./Solr status

実行すると、上記のコマンドは次のようにSolrのステータスを表示します-

Found 1 Solr nodes:

Solr process 6906 running on port 8983 {
   "Solr_home":"/home/Hadoop/Solr/server/Solr",
   "version":"6.2.0 764d0f19151dbff6f5fcd9fc4b2682cf934590c5 -
   mike - 2016-08-20 05:41:37",
   "startTime":"2016-09-20T06:00:02.877Z",
   "uptime":"0 days, 0 hours, 5 minutes, 14 seconds",
   "memory":"30.6 MB (%6.2) of 490.7 MB"
}

Solr管理者

Apache Solrを起動した後、次のURLを使用して* Solr Webインターフェース*のホームページにアクセスできます。

Localhost:8983/Solr/

Solr Adminのインターフェースは次のように表示されます-

Interface Solr Admin

Apache Solr-コア

Solr Coreは、使用に必要なすべてのSolr構成ファイルを含むLuceneインデックスの実行中のインスタンスです。 インデックス作成や分析などの操作を実行するには、Solr Coreを作成する必要があります。

Solrアプリケーションには、1つまたは複数のコアが含まれる場合があります。 必要に応じて、Solrアプリケーションの2つのコアが相互に通信できます。

コアを作成する

Solrをインストールして開始したら、Solrのクライアント(Webインターフェース)に接続できます。

コアの作成

次のスクリーンショットで強調されているように、最初はApache Solrにコアはありません。 次に、Solrでコアを作成する方法を見ていきます。

createコマンドを使用する

コアを作成する1つの方法は、以下に示すように、 create コマンドを使用して*スキーマレスコア*を作成することです-

[Hadoop@localhost bin]$ ./Solr create -c Solr_sample

ここでは、Apache Solrで Solr_sample という名前のコアを作成しようとしています。 このコマンドは、次のメッセージを表示するコアを作成します。

Copying configuration to new core instance directory:
/home/Hadoop/Solr/server/Solr/Solr_sample

Creating new core 'Solr_sample' using command:
http://localhost:8983/Solr/admin/cores?action=CREATE&name=Solr_sample&instanceD
ir = Solr_sample {
   "responseHeader":{
      "status":0,
      "QTime":11550
   },
   "core":"Solr_sample"
}

Solrで複数のコアを作成できます。 次のスクリーンショットに示すように、Solr Adminの左側に、新しく作成されたコアを選択できる*コアセレクタ*があります。

コアセレクター

create_coreコマンドを使用する

または、 create_core コマンドを使用してコアを作成できます。 このコマンドには次のオプションがあります-

–c *core_name * Name of the core you wanted to create
-p* port_name * Port at which you want to create the core
-d* conf_dir* Configuration directory of the port
*create_core* コマンドの使用方法を見てみましょう。 ここでは、 *my_core* という名前のコアを作成しようとします。
[Hadoop@localhost bin]$ ./Solr create_core -c my_core

実行すると、上記のコマンドは次のメッセージを表示するコアを作成します-

Copying configuration to new core instance directory:
/home/Hadoop/Solr/server/Solr/my_core

Creating new core 'my_core' using command:
http://localhost:8983/Solr/admin/cores?action=CREATE&name=my_core&instanceD
ir = my_core {
   "responseHeader":{
      "status":0,
      "QTime":1346
   },
   "core":"my_core"
}

コアを削除する

Apache Solrの delete コマンドを使用して、コアを削除できます。 次のスクリーンショットに示すように、Solrに my_core という名前のコアがあるとします。

コアの削除

次のようにコアの名前をこのコマンドに渡すことにより、 delete コマンドを使用してこのコアを削除できます-

[Hadoop@localhost bin]$ ./Solr delete -c my_core

上記のコマンドを実行すると、指定されたコアが削除され、次のメッセージが表示されます。

Deleting core 'my_core' using command:
http://localhost:8983/Solr/admin/cores?action=UNLOAD&core = my_core&deleteIndex
   = true&deleteDataDir = true&deleteInstanceDir = true  {

   "responseHeader" :{
      "status":0,
      "QTime":170
   }
}

SolrのWebインターフェースを開いて、コアが削除されたかどうかを確認できます。

Webインターフェイス

Apache Solr-データのインデックス作成

一般に、*インデックス作成*は、ドキュメントまたは(他のエンティティ)の体系的な配置です。 インデックス作成により、ユーザーはドキュメント内の情報を見つけることができます。

  • インデックス作成は、ドキュメントを収集、解析、保存します。
  • インデックスを作成して、必要なドキュメントを見つけながら検索クエリの速度とパフォーマンスを向上させます。

Apache Solrのインデックス作成

Apache Solrでは、xml、csv、pdfなどのさまざまなドキュメント形式のインデックスを作成(追加、削除、変更)できます。 いくつかの方法でSolrインデックスにデータを追加できます。

この章では、インデックス作成について説明します-

  • Solr Webインターフェースの使用。
  • Java、PythonなどのクライアントAPIを使用する
  • *投稿ツール*を使用します。

この章では、さまざまなインターフェイス(コマンドライン、Webインターフェイス、およびJavaクライアントAPI)を使用してApache Solrのインデックスにデータを追加する方法について説明します。

Postコマンドを使用してドキュメントを追加する

Solrの bin/ ディレクトリには post コマンドがあります。 このコマンドを使用すると、Apache SolrでJSON、XML、CSVなどのさまざまな形式のファイルにインデックスを付けることができます。

次のコードブロックに示すように、Apache Solrの bin ディレクトリを参照して、postコマンドの* –hオプション*を実行します。

[Hadoop@localhost bin]$ cd $SOLR_HOME
[Hadoop@localhost bin]$ ./post -h

上記のコマンドを実行すると、以下に示すように、* postコマンド*のオプションのリストが表示されます。

Usage: post -c <collection> [OPTIONS] <files|directories|urls|-d [".."]>
or post –help
   collection name defaults to DEFAULT_SOLR_COLLECTION if not specified
OPTIONS
=======
Solr options:
   -url <base Solr update URL> (overrides collection, host, and port)
   -host <host> (default: localhost)
   -p or -port <port> (default: 8983)
   -commit yes|no (default: yes)

Web crawl options:
   -recursive <depth> (default: 1)
   -delay <seconds> (default: 10)

Directory crawl options:
   -delay <seconds> (default: 0)

stdin/args options:
   -type <content/type> (default: application/xml)

Other options:
   -filetypes <type>[,<type>,...] (default:
   xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,
   rtf,htm,html,txt,log)
   -params "<key> = <value>[&<key> = <value>...]" (values must be
   URL-encoded; these pass through to Solr update request)
   -out yes|no (default: no; yes outputs Solr response to console)
   -format Solr (sends application/json content as Solr commands
   to/update instead of/update/json/docs)

Examples:
* JSON file:./post -c wizbang events.json
* XML files: ./post -c records article*.xml
* CSV file: ./post -c signals LATEST-signals.csv
* Directory of files: ./post -c myfiles ~/Documents
* Web crawl: ./post -c gettingstarted http://lucene.apache.org/Solr -recursive 1 -delay 1
* Standard input (stdin): echo '{commit: {}}' | ./post -c my_collection -
type application/json -out yes –d
* Data as string: ./post -c signals -type text/csv -out yes -d $'id,value\n1,0.47'

次の内容を持つ sample.csv という名前のファイルがあると仮定します( bin ディレクトリ内)。

Student ID First Name Lasst Name Phone City
001 Rajiv Reddy 9848022337 Hyderabad
002 Siddharth Bhattacharya 9848022338 Kolkata
003 Rajesh Khanna 9848022339 Delhi
004 Preethi Agarwal 9848022330 Pune
005 Trupthi Mohanty 9848022336 Bhubaneshwar
006 Archana Mishra 9848022335 Chennai

上記のデータセットには、学生ID、名、姓、電話、市などの個人情報が含まれています。 データセットのCSVファイルを以下に示します。 ここでは、スキーマに言及し、その最初の行を文書化する必要があることに注意する必要があります。

id,    first_name,   last_name,   phone_no,      location
001,   Pruthvi,      Reddy,       9848022337,    Hyderabad
002,   kasyap,       Sastry,      9848022338,    Vishakapatnam
003,   Rajesh,       Khanna,      9848022339,    Delhi
004,   Preethi,      Agarwal,     9848022330,    Pune
005,   Trupthi,      Mohanty,     9848022336,    Bhubaneshwar
006,   Archana,      Mishra,      9848022335,    Chennai

次のように post コマンドを使用して、 sample_Solr という名前のコアの下でこのデータにインデックスを付けることができます-

[Hadoop@localhost bin]$ ./post -c Solr_sample sample.csv

上記のコマンドを実行すると、指定されたドキュメントは指定されたコアの下でインデックス付けされ、次の出力が生成されます。

/home/Hadoop/java/bin/java -classpath/home/Hadoop/Solr/dist/Solr-core
6.2.0.jar -Dauto = yes -Dc = Solr_sample -Ddata = files
org.apache.Solr.util.SimplePostTool sample.csv
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/Solr/Solr_sample/update...
Entering auto mode. File endings considered are
xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,
htm,html,txt,log
POSTing file sample.csv (text/csv) to [base]
1 files indexed.
COMMITting Solr index changes to
http://localhost:8983/Solr/Solr_sample/update...
Time spent: 0:00:00.228

次のURLを使用してSolr Web UIのホームページにアクセスします-

*http://localhost:8983/*

コア Solr_sample を選択します。 デフォルトでは、リクエストハンドラは /select で、クエリは「:」です。 変更を行わずに、ページの下部にある ExecuteQuery ボタンをクリックします。

Solrサンプル

次のスクリーンショットに示すように、クエリの実行時に、JSON形式(デフォルト)でインデックス付けされたCSVドキュメントの内容を確認できます。

CSVドキュメント

-同様に、JSON、XML、CSVなどの他のファイル形式にインデックスを付けることができます。

Solr Webインターフェースを使用した文書の追加

Solrが提供するWebインターフェースを使用して、ドキュメントのインデックスを作成することもできます。 次のJSONドキュメントにインデックスを付ける方法を見てみましょう。

[
   {
      "id" : "001",
      "name" : "Ram",
      "age" : 53,
      "Designation" : "Manager",
      "Location" : "Hyderabad",
   },
   {
      "id" : "002",
      "name" : "Robert",
      "age" : 43,
      "Designation" : "SR.Programmer",
      "Location" : "Chennai",
   },
   {
      "id" : "003",
      "name" : "Rahim",
      "age" : 25,
      "Designation" : "JR.Programmer",
      "Location" : "Delhi",
   }
]

ステップ1

次のURLを使用してSolr Webインターフェースを開きます-

*http://localhost:8983/*

ステップ2

コア Solr_sample を選択します。 デフォルトでは、次のスクリーンショットに示すように、リクエストハンドラ、共通内、上書き、およびブーストの各フィールドの値は、それぞれ/update、1000、true、および1.0です。

リクエストハンドラ

次に、JSON、CSV、XMLなどから必要なドキュメント形式を選択します。 次のスクリーンショットに示すように、テキスト領域にインデックスを作成するドキュメントを入力し、[ドキュメントを送信]ボタンをクリックします。

ドキュメントの送信

JavaクライアントAPIを使用してドキュメントを追加する

以下は、Apache Solrインデックスにドキュメントを追加するJavaプログラムです。 このコードを AddingDocument.java という名前のファイルに保存します。

import java.io.IOException;

import org.apache.Solr.client.Solrj.SolrClient;
import org.apache.Solr.client.Solrj.SolrServerException;
import org.apache.Solr.client.Solrj.impl.HttpSolrClient;
import org.apache.Solr.common.SolrInputDocument;

public class AddingDocument {
   public static void main(String args[]) throws Exception {
     //Preparing the Solr client
      String urlString = "http://localhost:8983/Solr/my_core";
      SolrClient Solr = new HttpSolrClient.Builder(urlString).build();

     //Preparing the Solr document
      SolrInputDocument doc = new SolrInputDocument();

     //Adding fields to the document
      doc.addField("id", "003");
      doc.addField("name", "Rajaman");
      doc.addField("age","34");
      doc.addField("addr","vishakapatnam");

     //Adding the document to Solr
      Solr.add(doc);

     //Saving the changes
      Solr.commit();
      System.out.println("Documents added");
   }
}

端末で次のコマンドを実行して、上記のコードをコンパイルします-

[Hadoop@localhost bin]$ javac AddingDocument
[Hadoop@localhost bin]$ java AddingDocument

上記のコマンドを実行すると、次の出力が得られます。

Documents added

Apache Solr-ドキュメントの追加(XML)

前の章では、JSONおよび.CSVファイル形式のSolrにデータを追加する方法について説明しました。 この章では、XMLドキュメント形式を使用してApache Solrインデックスにデータを追加する方法を示します。

サンプルデータ

XMLファイル形式を使用して次のデータをSolrインデックスに追加する必要があるとします。

Student ID First Name Last Name Phone City
001 Rajiv Reddy 9848022337 Hyderabad
002 Siddharth Bhattacharya 9848022338 Kolkata
003 Rajesh Khanna 9848022339 Delhi
004 Preethi Agarwal 9848022330 Pune
005 Trupthi Mohanty 9848022336 Bhubaneshwar
006 Archana Mishra 9848022335 Chennai

XMLを使用したドキュメントの追加

上記のデータをSolrインデックスに追加するには、以下に示すようにXMLドキュメントを準備する必要があります。 このドキュメントを sample.xml という名前のファイルに保存します。

<add>
   <doc>
      <field name = "id">001</field>
      <field name = "first name">Rajiv</field>
      <field name = "last name">Reddy</field>
      <field name = "phone">9848022337</field>
      <field name = "city">Hyderabad</field>
   </doc>
   <doc>
      <field name = "id">002</field>
      <field name = "first name">Siddarth</field>
      <field name = "last name">Battacharya</field>
      <field name = "phone">9848022338</field>
      <field name = "city">Kolkata</field>
   </doc>
   <doc>
      <field name = "id">003</field>
      <field name = "first name">Rajesh</field>
      <field name = "last name">Khanna</field>
      <field name = "phone">9848022339</field>
      <field name = "city">Delhi</field>
   </doc>
   <doc>
      <field name = "id">004</field>
      <field name = "first name">Preethi</field>
      <field name = "last name">Agarwal</field>
      <field name = "phone">9848022330</field>
      <field name = "city">Pune</field>
   </doc>
   <doc>
      <field name = "id">005</field>
      <field name = "first name">Trupthi</field>
      <field name = "last name">Mohanthy</field>
      <field name = "phone">9848022336</field>
      <field name = "city">Bhuwaeshwar</field>
   </doc>
   <doc>
      <field name = "id">006</field>
      <field name = "first name">Archana</field>
      <field name = "last name">Mishra</field>
      <field name = "phone">9848022335</field>
      <field name = "city">Chennai</field>
   </doc>
</add>

ご覧のとおり、データをインデックスに追加するために記述されたXMLファイルには、<add> </add>、<doc> </doc>、および<field> </field>という3つの重要なタグが含まれています。

  • 追加-これは、ドキュメントをインデックスに追加するためのルートタグです。 追加される1つ以上のドキュメントが含まれています。
  • doc -追加するドキュメントは、<doc> </doc>タグで囲む必要があります。 このドキュメントには、フィールドの形式でデータが含まれています。
  • フィールド-フィールドタグは、ドキュメントのフィールドの名前と値を保持します。

ドキュメントを準備した後、前の章で説明した方法のいずれかを使用して、このドキュメントをインデックスに追加できます。

XMLファイルがSolrの bin ディレクトリに存在し、 my_core という名前のコアでインデックス付けされると仮定し、次のように post ツールを使用してSolrインデックスに追加できます-

[Hadoop@localhost bin]$ ./post -c my_core sample.xml

上記のコマンドを実行すると、次の出力が得られます。

/home/Hadoop/java/bin/java -classpath/home/Hadoop/Solr/dist/Solr-
core6.2.0.jar -Dauto = yes -Dc = my_core -Ddata = files
org.apache.Solr.util.SimplePostTool sample.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/Solr/my_core/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,
xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file sample.xml (application/xml) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/Solr/my_core/update...
Time spent: 0:00:00.201

検証

Apache Solr Webインターフェースのホームページにアクセスして、コア my_core を選択します。 テキスト領域 q にクエリ「:」を渡してすべてのドキュメントを取得し、クエリを実行してください。 実行すると、目的のデータがSolrインデックスに追加されていることがわかります。

Solr Index

Apache Solr-データの更新

XMLを使用してドキュメントを更新する

以下は、既存のドキュメントのフィールドを更新するために使用されるXMLファイルです。 これを update.xml という名前のファイルに保存します。

<add>
   <doc>
      <field name = "id">001</field>
      <field name = "first name" update = "set">Raj</field>
      <field name = "last name" update = "add">Malhotra</field>
      <field name = "phone" update = "add">9000000000</field>
      <field name = "city" update = "add">Delhi</field>
   </doc>
</add>

ご覧のとおり、データを更新するために記述されたXMLファイルは、ドキュメントを追加するために使用するものとまったく同じです。 ただし、唯一の違いは、フィールドの update 属性を使用することです。

この例では、上記のドキュメントを使用し、ID 001 でドキュメントのフィールドを更新しようとします。

XMLドキュメントがSolrの bin ディレクトリに存在するとします。 my_core という名前のコアに存在するインデックスを更新しているため、次のように post ツールを使用して更新できます-

[Hadoop@localhost bin]$ ./post -c my_core update.xml

上記のコマンドを実行すると、次の出力が得られます。

/home/Hadoop/java/bin/java -classpath/home/Hadoop/Solr/dist/Solr-core
6.2.0.jar -Dauto = yes -Dc = my_core -Ddata = files
org.apache.Solr.util.SimplePostTool update.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/Solr/my_core/update...
Entering auto mode. File endings considered are
xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,
htm,html,txt,log
POSTing file update.xml (application/xml) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/Solr/my_core/update...
Time spent: 0:00:00.159

検証

Apache Solr Webインターフェースのホームページにアクセスし、コアを my_core として選択します。 テキスト領域 q にクエリ「:」を渡してすべてのドキュメントを取得し、クエリを実行してください。 実行すると、ドキュメントが更新されたことを確認できます。

クエリの実行

Javaを使用したドキュメントの更新(クライアントAPI)

以下は、Apache Solrインデックスにドキュメントを追加するJavaプログラムです。 このコードを UpdatingDocument.java という名前のファイルに保存します。

import java.io.IOException;

import org.apache.Solr.client.Solrj.SolrClient;
import org.apache.Solr.client.Solrj.SolrServerException;
import org.apache.Solr.client.Solrj.impl.HttpSolrClient;
import org.apache.Solr.client.Solrj.request.UpdateRequest;
import org.apache.Solr.client.Solrj.response.UpdateResponse;
import org.apache.Solr.common.SolrInputDocument;

public class UpdatingDocument {
   public static void main(String args[]) throws SolrServerException, IOException {
     //Preparing the Solr client
      String urlString = "http://localhost:8983/Solr/my_core";
      SolrClient Solr = new HttpSolrClient.Builder(urlString).build();

     //Preparing the Solr document
      SolrInputDocument doc = new SolrInputDocument();

      UpdateRequest updateRequest = new UpdateRequest();
      updateRequest.setAction( UpdateRequest.ACTION.COMMIT, false, false);
      SolrInputDocument myDocumentInstantlycommited = new SolrInputDocument();

      myDocumentInstantlycommited.addField("id", "002");
      myDocumentInstantlycommited.addField("name", "Rahman");
      myDocumentInstantlycommited.addField("age","27");
      myDocumentInstantlycommited.addField("addr","hyderabad");

      updateRequest.add( myDocumentInstantlycommited);
      UpdateResponse rsp = updateRequest.process(Solr);
      System.out.println("Documents Updated");
   }
}

端末で次のコマンドを実行して、上記のコードをコンパイルします-

[Hadoop@localhost bin]$ javac UpdatingDocument
[Hadoop@localhost bin]$ java UpdatingDocument

上記のコマンドを実行すると、次の出力が得られます。

Documents updated

Apache Solr-ドキュメントの削除

ドキュメントを削除する

Apache Solrのインデックスからドキュメントを削除するには、削除するドキュメントのIDを<delete> </delete>タグの間に指定する必要があります。

<delete>
   <id>003</id>
   <id>005</id>
   <id>004</id>
   <id>002</id>
</delete>

ここでは、このXMLコードを使用して、IDが 003 および 005 のドキュメントを削除します。 このコードを delete.xml という名前のファイルに保存します。

*my_core* という名前のコアに属するインデックスからドキュメントを削除する場合、以下に示すように、 *post* ツールを使用して *delete.xml* ファイルを投稿できます。
[Hadoop@localhost bin]$ ./post -c my_core delete.xml

上記のコマンドを実行すると、次の出力が得られます。

/home/Hadoop/java/bin/java -classpath/home/Hadoop/Solr/dist/Solr-core
6.2.0.jar -Dauto = yes -Dc = my_core -Ddata = files
org.apache.Solr.util.SimplePostTool delete.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/Solr/my_core/update...
Entering auto mode. File endings considered are
xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,
rtf,htm,html,txt,log
POSTing file delete.xml (application/xml) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/Solr/my_core/update...
Time spent: 0:00:00.179

検証

Apache Solr Webインターフェースのホームページにアクセスし、コアを my_core として選択します。 テキスト領域 q にクエリ「:」を渡してすべてのドキュメントを取得し、クエリを実行してください。 実行すると、指定されたドキュメントが削除されたことを確認できます。

ドキュメントの削除

フィールドを削除する

ID以外のフィールドに基づいてドキュメントを削除する必要がある場合があります。 たとえば、都市がチェンナイであるドキュメントを削除する必要がある場合があります。

このような場合、<query> </query>タグペア内のフィールドの名前と値を指定する必要があります。

<delete>
   <query>city:Chennai</query>
</delete>
*delete_field.xml* として保存し、Solrの *post* ツールを使用して、 *my_core* という名前のコアで削除操作を実行します。
[Hadoop@localhost bin]$ ./post -c my_core delete_field.xml

上記のコマンドを実行すると、次の出力が生成されます。

/home/Hadoop/java/bin/java -classpath/home/Hadoop/Solr/dist/Solr-core
6.2.0.jar -Dauto = yes -Dc = my_core -Ddata = files
org.apache.Solr.util.SimplePostTool delete_field.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/Solr/my_core/update...
Entering auto mode. File endings considered are
xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,
rtf,htm,html,txt,log
POSTing file delete_field.xml (application/xml) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/Solr/my_core/update...
Time spent: 0:00:00.084

検証

Apache Solr Webインターフェースのホームページにアクセスし、コアを my_core として選択します。 テキスト領域 q にクエリ「:」を渡してすべてのドキュメントを取得し、クエリを実行してください。 実行時に、指定されたフィールド値のペアを含むドキュメントが削除されることを確認できます。

値ペア

すべての文書を削除する

特定のフィールドを削除するのと同じように、インデックスからすべてのドキュメントを削除する場合は、下に示すように、タグ<query> </query>の間に記号「:」を渡すだけです。

<delete>
   <query>*:*</query>
</delete>
*delete_all.xml* として保存し、Solrの *post* ツールを使用して、 *my_core* という名前のコアで削除操作を実行します。
[Hadoop@localhost bin]$ ./post -c my_core delete_all.xml

上記のコマンドを実行すると、次の出力が生成されます。

/home/Hadoop/java/bin/java -classpath/home/Hadoop/Solr/dist/Solr-core
6.2.0.jar -Dauto = yes -Dc = my_core -Ddata = files
org.apache.Solr.util.SimplePostTool deleteAll.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/Solr/my_core/update...
Entering auto mode. File endings considered are
xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,
htm,html,txt,log
POSTing file deleteAll.xml (application/xml) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/Solr/my_core/update...
Time spent: 0:00:00.138

検証

Apache Solr Webインターフェースのホームページにアクセスし、コアを my_core として選択します。 テキスト領域 q にクエリ「:」を渡してすべてのドキュメントを取得し、クエリを実行してください。 実行時に、指定されたフィールド値のペアを含むドキュメントが削除されることを確認できます。

削除された値のペア

Javaを使用してすべてのドキュメントを削除する(クライアントAPI)

以下は、Apache Solrインデックスにドキュメントを追加するJavaプログラムです。 このコードを UpdatingDocument.java という名前のファイルに保存します。

import java.io.IOException;

import org.apache.Solr.client.Solrj.SolrClient;
import org.apache.Solr.client.Solrj.SolrServerException;
import org.apache.Solr.client.Solrj.impl.HttpSolrClient;
import org.apache.Solr.common.SolrInputDocument;

public class DeletingAllDocuments {
   public static void main(String args[]) throws SolrServerException, IOException {
     //Preparing the Solr client
      String urlString = "http://localhost:8983/Solr/my_core";
      SolrClient Solr = new HttpSolrClient.Builder(urlString).build();

     //Preparing the Solr document
      SolrInputDocument doc = new SolrInputDocument();

     //Deleting the documents from Solr
      Solr.deleteByQuery("*");

     //Saving the document
      Solr.commit();
      System.out.println("Documents deleted");
   }
}

端末で次のコマンドを実行して、上記のコードをコンパイルします-

[Hadoop@localhost bin]$ javac DeletingAllDocuments
[Hadoop@localhost bin]$ java DeletingAllDocuments

上記のコマンドを実行すると、次の出力が得られます。

Documents deleted

Apache Solr-データの取得

この章では、JavaクライアントAPIを使用してデータを取得する方法について説明します。 次の内容を持つ sample.csv という名前の.csvドキュメントがあるとします。

001,9848022337,Hyderabad,Rajiv,Reddy
002,9848022338,Kolkata,Siddarth,Battacharya
003,9848022339,Delhi,Rajesh,Khanna
*post* コマンドを使用して、 *sample_Solr* という名前のコアの下でこのデータにインデックスを付けることができます。
[Hadoop@localhost bin]$ ./post -c Solr_sample sample.csv

以下は、Apache Solrインデックスにドキュメントを追加するJavaプログラムです。 このコードを RetrievingData.java という名前のファイルに保存します。

import java.io.IOException;

import org.apache.Solr.client.Solrj.SolrClient;
import org.apache.Solr.client.Solrj.SolrQuery;
import org.apache.Solr.client.Solrj.SolrServerException;
import org.apache.Solr.client.Solrj.impl.HttpSolrClient;
import org.apache.Solr.client.Solrj.response.QueryResponse;
import org.apache.Solr.common.SolrDocumentList;

public class RetrievingData {
   public static void main(String args[]) throws SolrServerException, IOException  {
     //Preparing the Solr client
      String urlString = "http://localhost:8983/Solr/my_core";
      SolrClient Solr = new HttpSolrClient.Builder(urlString).build();

     //Preparing Solr query
      SolrQuery query = new SolrQuery();
      query.setQuery("*:*");

     //Adding the field to be retrieved
      query.addField("*");

     //Executing the query
      QueryResponse queryResponse = Solr.query(query);

     //Storing the results of the query
      SolrDocumentList docs = queryResponse.getResults();
      System.out.println(docs);
      System.out.println(docs.get(0));
      System.out.println(docs.get(1));
      System.out.println(docs.get(2));

     //Saving the operations
      Solr.commit();
   }
}

端末で次のコマンドを実行して、上記のコードをコンパイルします-

[Hadoop@localhost bin]$ javac RetrievingData
[Hadoop@localhost bin]$ java RetrievingData

上記のコマンドを実行すると、次の出力が得られます。

{numFound = 3,start = 0,docs = [SolrDocument{id=001, phone = [9848022337],
city = [Hyderabad], first_name = [Rajiv], last_name = [Reddy],
_version_ = 1547262806014820352}, SolrDocument{id = 002, phone = [9848022338],
city = [Kolkata], first_name = [Siddarth], last_name = [Battacharya],

_version_ = 1547262806026354688}, SolrDocument{id = 003, phone = [9848022339],
city = [Delhi], first_name = [Rajesh], last_name = [Khanna],

_version_ = 1547262806029500416}]}

SolrDocument{id = 001, phone = [9848022337], city = [Hyderabad], first_name = [Rajiv],
last_name = [Reddy], _version_ = 1547262806014820352}

SolrDocument{id = 002, phone = [9848022338], city = [Kolkata], first_name = [Siddarth],
last_name = [Battacharya], _version_ = 1547262806026354688}

SolrDocument{id = 003, phone = [9848022339], city = [Delhi], first_name = [Rajesh],
last_name = [Khanna], _version_ = 1547262806029500416}

Apache Solr-データのクエリ

データの保存に加えて、Apache Solrは必要に応じてデータを照会する機能も提供します。 Solrには特定のパラメーターが用意されており、これを使用して、保存されているデータを照会できます。

次の表に、Apache Solrで使用可能なさまざまなクエリパラメーターを示します。

Parameter Description
q This is the main query parameter of Apache Solr, documents are scored by their similarity to terms in this parameter.
fq This parameter represents the filter query of Apache Solr the restricts the result set to documents matching this filter.
start The start parameter represents the starting offsets for a page results the default value of this parameter is 0.
rows This parameter represents the number of the documents that are to be retrieved per page. The default value of this parameter is 10.
sort This parameter specifies the list of fields, separated by commas, based on which the results of the query is to be sorted.
fl This parameter specifies the list of the fields to return for each document in the result set.
wt This parameter represents the type of the response writer we wanted to view the result.

これらすべてのパラメーターは、Apache Solrを照会するためのオプションとして表示できます。 Apache Solrのホームページにアクセスしてください。 ページの左側で、[クエリ]オプションをクリックします。 ここで、クエリのパラメーターのフィールドを確認できます。

クエリパラメータ

レコードの取得

*my_core* という名前のコアに3つのレコードがあるとします。 選択したコアから特定のレコードを取得するには、特定のドキュメントのフィールドの名前と値のペアを渡す必要があります。 たとえば、フィールド *id* の値を持つレコードを取得する場合、フィールドの名前と値のペアをパラメーター *q* の値として- *Id:001* として渡し、実行する必要があります。クエリ。

レコードの取得

同様に、次のスクリーンショットに示すように、 q を値としてパラメーター q に渡すことにより、インデックスからすべてのレコードを取得できます。

すべて取得

2 ^ nd ^レコードから取得する

次のスクリーンショットに示すように、パラメータとして start に値として2を渡すことにより、2番目のレコードからレコードを取得できます。

次のレコード

レコード数の制限

*rows* パラメーターに値を指定することにより、レコードの数を制限できます。 たとえば、次のスクリーンショットに示すように、パラメータ *rows* に値2を渡すことで、クエリの結果のレコードの総数を2に制限できます。

制限

応答ライタタイプ

パラメーター wt の提供された値から1つを選択することにより、必要な文書タイプで応答を取得できます。

レスポンスライタープラン

上記の例では、応答を取得するために .csv 形式を選択しました。

フィールドのリスト

結果のドキュメントに特定のフィールドを含める場合は、コンマで区切られた必須フィールドのリストを値としてプロパティ fl に渡す必要があります。

次の例では、フィールドを取得しようとしています-* id、phone、および *first_name

リストフィールド

Apache Solr-ファセット

Apache Solrのファセットとは、検索結果をさまざまなカテゴリに分類することです。 この章では、Apache Solrで利用可能なファセットの種類について説明します-

  • クエリファセット-指定されたクエリにも一致する現在の検索結果のドキュメントの数を返します。
  • 日付ファセット-特定の日付範囲内にあるドキュメントの数を返します。

ファセットコマンドは通常のSolrクエリリクエストに追加され、ファセットカウントは同じクエリ応答で返されます。

ファセットクエリの例

フィールド faceting を使用して、すべての用語のカウント、または特定のフィールドの上位の用語のみを取得できます。

例として、さまざまな書籍に関するデータを含む次の books.csv ファイルを考えてみましょう。

id,cat,name,price,inStock,author,series_t,sequence_i,genre_s
0553573403,book,A Game of Thrones,5.99,true,George R.R. Martin,"A Song of Ice
and Fire",1,fantasy

0553579908,book,A Clash of Kings,10.99,true,George R.R. Martin,"A Song of Ice
and Fire",2,fantasy

055357342X,book,A Storm of Swords,7.99,true,George R.R. Martin,"A Song of Ice
and Fire",3,fantasy

0553293354,book,Foundation,7.99,true,Isaac Asimov,Foundation Novels,1,scifi
0812521390,book,The Black Company,4.99,false,Glen Cook,The Chronicles of The
Black Company,1,fantasy

0812550706,book,Ender's Game,6.99,true,Orson Scott Card,Ender,1,scifi
0441385532,book,Jhereg,7.95,false,Steven Brust,Vlad Taltos,1,fantasy
0380014300,book,Nine Princes In Amber,6.99,true,Roger Zelazny,the Chronicles of
Amber,1,fantasy

0805080481,book,The Book of Three,5.99,true,Lloyd Alexander,The Chronicles of
Prydain,1,fantasy

080508049X,book,The Black Cauldron,5.99,true,Lloyd Alexander,The Chronicles of
Prydain,2,fantasy
*post* ツールを使用して、このファイルをApache Solrに投稿しましょう。
[Hadoop@localhost bin]$ ./post -c Solr_sample sample.csv

上記のコマンドを実行すると、指定された .csv ファイルに記載されているすべてのドキュメントがApache Solrにアップロードされます。

次に、コレクション/コア my_core に0行のフィールド author でファセットクエリを実行します。

Apache SolrのWeb UIを開き、ページの左側で、次のスクリーンショットに示すように、チェックボックス facet をオンにします。

チェックボックス

チェックボックスをオンにすると、ファセット検索のパラメーターを渡すために、さらに3つのテキストフィールドがあります。 ここで、クエリのパラメーターとして、次の値を渡します。

q = *:*, rows = 0, facet.field = author

最後に、[クエリの実行]ボタンをクリックしてクエリを実行します。

クエリパス

実行すると、次の結果が生成されます。

作成者の結果

著者に基づいてインデックス内のドキュメントを分類し、各著者が投稿した書籍の数を指定します。

JavaクライアントAPIを使用したファセット

以下は、Apache Solrインデックスにドキュメントを追加するJavaプログラムです。 このコードを HitHighlighting.java という名前のファイルに保存します。

import java.io.IOException;
import java.util.List;

import org.apache.Solr.client.Solrj.SolrClient;
import org.apache.Solr.client.Solrj.SolrQuery;
import org.apache.Solr.client.Solrj.SolrServerException;
import org.apache.Solr.client.Solrj.impl.HttpSolrClient;
import org.apache.Solr.client.Solrj.request.QueryRequest;
import org.apache.Solr.client.Solrj.response.FacetField;
import org.apache.Solr.client.Solrj.response.FacetField.Count;
import org.apache.Solr.client.Solrj.response.QueryResponse;
import org.apache.Solr.common.SolrInputDocument;

public class HitHighlighting {
   public static void main(String args[]) throws SolrServerException, IOException {
     //Preparing the Solr client
      String urlString = "http://localhost:8983/Solr/my_core";
      SolrClient Solr = new HttpSolrClient.Builder(urlString).build();

     //Preparing the Solr document
      SolrInputDocument doc = new SolrInputDocument();

     //String query = request.query;
      SolrQuery query = new SolrQuery();

     //Setting the query string
      query.setQuery("*:*");

     //Setting the no.of rows
      query.setRows(0);

     //Adding the facet field
      query.addFacetField("author");

     //Creating the query request
      QueryRequest qryReq = new QueryRequest(query);

     //Creating the query response
      QueryResponse resp = qryReq.process(Solr);

     //Retrieving the response fields
      System.out.println(resp.getFacetFields());

      List<FacetField> facetFields = resp.getFacetFields();
      for (int i = 0; i > facetFields.size(); i++) {
         FacetField facetField = facetFields.get(i);
         List<Count> facetInfo = facetField.getValues();

         for (FacetField.Count facetInstance : facetInfo) {
            System.out.println(facetInstance.getName() + " : " +
               facetInstance.getCount() + " [drilldown qry:" +
               facetInstance.getAsFilterQuery());
         }
         System.out.println("Hello");
      }
   }
}

端末で次のコマンドを実行して、上記のコードをコンパイルします-

[Hadoop@localhost bin]$ javac HitHighlighting
[Hadoop@localhost bin]$ java HitHighlighting

上記のコマンドを実行すると、次の出力が得られます。

[author:[George R.R. Martin (3), Lloyd Alexander (2), Glen Cook (1), Isaac
Asimov (1), Orson Scott Card (1), Roger Zelazny (1), Steven Brust (1)]]