ElasticsearchElasticsearchを使い始める


備考

Elasticsearchは、Luceneに基づいてJavaで書かれた高度なオープンソース検索サーバーです。

これは、HTTP REST APIを介してアクセス可能な、テキスト全体、部分的なテキスト、クエリベースおよびジオロケーションベースの検索機能を分散して提供します。

バージョン

バージョン発売日
5.2.1 2017-02-14
5.2.0 2017-01-31
5.1.2 2017-01-12
5.1.1 2016-12-08
5.0.2 2016-11-29
5.0.1 2016-11-15
5.0.0 2016-10-26
2.4.0 2016-08-31
2.3.0 2016-03-30
2.2.0 2016-02-02
2.1.0 2015-11-24
2.0.0 2015-10-28
1.7.0 2015-07-16
1.6.0 2015-06-09
1.5.0 2015-03-06
1.4.0 2014-11-05
1.3.0 2014-07-23
1.2.0 2014-05-22
1.1.0 2014-03-25
1.0.0 2014-02-14

例を用いた基本検索パラメータ:

既定では、すべての検索の一部として完全なインデックス付きドキュメントが返されます。これは、ソース(検索ヒットの_source フィールド)と呼ばれます。ソース文書全体を返すことを望まない場合、返されるソース内のいくつかのフィールドだけを要求するか、 _source をfalseに設定してフィールドを完全に省略することができます。

次の例は、 account_numberbalance_source 内部)の2つのフィールドをaccount_number から戻す方法を示しています。

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match_all": {} },
  "_source": ["account_number", "balance"]
}'
 

上記の例は、単に_source フィールドで返される情報を減らすことに注意してください。 _source という1つのフィールドだけを返しますが、 account_number フィールドとbalance フィールドのみが含まれます。

あなたがSQLのバックグラウンドから来たのであれば、上記はSQLのクエリと概念が多少似ています

SELECT account_number, balance FROM bank;
 

では、クエリ部分に移りましょう。以前は、 match_all クエリを使用してすべてのドキュメントを照合する方法を見てきました。ここでは、マッチクエリと呼ばれる新しいクエリを紹介します。これは、基本的なフィールド検索クエリ(つまり、特定のフィールドまたはフィールドセットに対して行われた検索)と考えることができます。

この例では、 account_number20 設定されたアカウントが返されます。

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "account_number": 20 } }
}'
 

この例では、 address 「ミル」という用語を含むすべての勘定科目を返しaddress

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "address": "mill" } }
}'
 

この例では、 address 「mill」または「lane」という用語を含むすべてのアカウントを返しaddress

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "address": "mill lane" } }
}'
 

この例は、クエリを用語に分割し、お互いに同じ位置にあるaddress 内のすべての用語を含むドキュメントのみを返すmatchmatch_phrase )の変形です[1]

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match_phrase": { "address": "mill lane" } }
}'
 

bool(ean)クエリを紹介しましょう。 boolクエリを使用すると、ブール論理を使用して、より小さいクエリをより大きなクエリに構成することができます。

この例では、2つの一致クエリを作成し、アドレスに「mill」と「lane」を含むすべてのアカウントを返します。

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'
 

上記の例では、bool must 句は、ドキュメントが一致とみなされるために真でなければならないすべてのクエリを指定します。

対照的に、この例では、2つの一致クエリを作成し、 address 「mill」または「lane」を含むすべてのアカウントを返しaddress

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "should": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'
 

上の例では、bool should 節は、文書が一致するとみなされるためには真でなければならない問合せのリストを指定します。

この例では、2つの一致クエリを作成し、 address 「ミル」も「レーン」も含まないすべてのアカウントを返しaddress

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must_not": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'
 

上記の例では、bool must_not句は、ドキュメントが一致とみなされるためには真でなければならないクエリのリストを指定します。

boolクエリの中でmust、should、must_not節を同時に組み合わせることができます。さらに、これらのブール句のいずれかの内部でブールクエリを作成して、複雑なマルチレベルブール論理を模倣することができます。

この例では、正確に40歳で、ワシントンに住んでいない人に属するすべてのアカウントを返します( WA は短い)。

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "WA" } }
      ]
    }
  }
}'
 

ドキュメントの索引付けと取得

ElasticsearchはHTTP REST APIを介してアクセスされます。通常はcURLライブラリを使用します。検索サーバーとクライアント(ユーザーまたはアプリケーション)との間のメッセージは、JSON文字列の形式で送信されます。デフォルトでは、Elasticsearchはポート9200で動作します。

以下の例では、ElasticsearchにJSONレスポンスをあらかじめ確認するように指示するために?pretty が追加されています。アプリケーション内でこれらのエンドポイントを使用する場合は、このクエリパラメータを追加する必要はありません。

ドキュメントのインデックス作成

後で索引内の情報を更新する場合は、索引付けする文書に一意のIDを割り当てることをお勧めします。 megacorp という名前の索引に文書を追加するには、 employee とID 1 タイプを実行します。

curl -XPUT "http://localhost:9200/megacorp/employee/1?pretty" -d'
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}' 
 

応答:

{
  "_index": "megacorp",
  "_type": "employee",
  "_id": "1",
  "_version": 1,
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "created": true
}

 

インデックスは、PUT呼び出しを送信するときに存在しない場合に作成されます。

IDなしのインデックス作成

POST /megacorp/employee?pretty
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}
 

応答:

{
  "_index": "megacorp",
  "_type": "employee",
  "_id": "AVYg2mBJYy9ijdngfeGa",
  "_version": 1,
  "_shards": {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "created": true
}

 

ドキュメントの取得

curl -XGET "http://localhost:9200/megacorp/employee/1?pretty"
 

応答:

{
  "_index": "megacorp",
  "_type": "employee",
  "_id": "1",
  "_version": 1,
  "found": true,
  "_source": {
    "first_name": "John",
    "last_name": "Smith",
    "age": 25,
    "about": "I love to go rock climbing",
    "interests": [
      "sports",
      "music"
    ]
  }
}

 

megacorp インデックスからemployee という型の10個のドキュメントを取得します。

curl -XGET "http://localhost:9200/megacorp/employee/_search?pretty"
 

応答:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 1,
    "hits": [
      {
        "_index": "megacorp",
        "_type": "employee",
        "_id": "1",
        "_score": 1,
        "_source": {
          "first_name": "John",
          "last_name": "Smith",
          "age": 25,
          "about": "I love to go rock climbing",
          "interests": [
            "sports",
            "music"
          ]
        }
      },
      {
        "_index": "megacorp",
        "_type": "employee",
        "_id": "AVYg2mBJYy9ijdngfeGa",
        "_score": 1,
        "_source": {
          "first_name": "Jane",
          "last_name": "Smith",
          "age": 32,
          "about": "I like to collect rock albums",
          "interests": [
            "music"
          ]
        }
      }
    ]
  }
}

 

提供されたフィールドで正確に一致するものを探すmatch クエリを使用した簡単な検索:

curl -XGET "http://localhost:9200/megacorp/employee/_search" -d'
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}'
 

応答:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.6931472,
    "hits": [
      {
        "_index": "megacorp",
        "_type": "employee",
        "_id": "1",
        "_score": 0.6931472,
        "_source": {
          "first_name": "John",
          "last_name": "Smith",
          "age": 25,
          "about": "I love to go rock climbing",
          "interests": [
            "sports",
            "music"
          ]
        }
      }
    ]
  }
}

 

CentOS 7にElasticsearchとKibanaをインストールする

Elasticsearchを実行するには、マシン上にJava Runtime Environment(JRE)が必要です。 ElasticsearchにはJava 7以上が必要であり、 Oracle JDK version 1.8.0_73 を推奨しOracle JDK version 1.8.0_73

したがって、システムにJavaがあるかどうかを確認してください。そうでない場合は、次の手順に従います。

# Install wget with yum 
yum -y install wget

# Download the rpm jre-8u60-linux-x64.rpm for 64 bit 
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jre-8u60-linux-x64.rpm"

# Download the rpm jre-8u101-linux-i586.rpm for 32 bit
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u101-b13/jre-8u101-linux-i586.rpm"

# Install jre-.*.rpm
rpm -ivh jre-.*.rpm
 

JavaはCentOSシステムに今インストールする必要があります。あなたはそれをチェックすることができます:

java -version
 

elasticsearchのダウンロードとインストール

# Download elasticsearch-2.3.5.rpm 
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.5/elasticsearch-2.3.5.rpm

# Install elasticsearch-.*.rpm
rpm -ivh elasticsearch-.*.rpm   
 

起動時にシステムサーチとしてelasticsearchを実行する

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

# check the current status to ensure everything is okay.
systemctl status elasticsearch
 

木場を設置する

rpmで最初にGPGキーをインポートする

sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
 

次に、ローカルリポジトリkibana.repo 作成しますkibana.repo

sudo vi /etc/yum.repos.d/kibana.repo 
 

そして次のコンテンツを追加します:

[kibana-4.4]
name=Kibana repository for 4.4.x packages
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
 

次のコマンドでkibanaをインストールします。

yum -y install kibana
 

それを始める:

systemctl start kibana
 

ステータスを確認するには:

systemctl status kibana
 

スタートアップサービスとして実行することができます。

systemctl enable kibana
 

Ubuntu 14.04でのElasticsearchのインストール


前提条件

Elasticsearchを実行するには、マシン上にJava Runtime Environment(JRE)が必要です。 ElasticsearchにはJava 7以上が必要であり、 Oracle JDK version 1.8.0_73 を推奨しOracle JDK version 1.8.0_73

Oracle Java 8をインストールする

sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | sudo debconf-set-selections
sudo apt-get install -y oracle-java8-installer
 

Javaバージョンを確認する

java -version
 

パッケージのダウンロードとインストール

バイナリの使用

  1. Elasticsearchの最新の安定版をここからダウンロードしてください
  2. ファイルを解凍して実行する

Linux:

$ bin/elasticsearch
 

apt-getを使う

ウェブサイトからelasticsearchをダウンロードする代わりに、 apt-get を使用してそれをインストールしapt-get

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
sudo apt-get update && sudo apt-get install elasticsearch
sudo /etc/init.d/elasticsearch start
 

elasticsearchバージョン5.xのインストール

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
sudo apt-get update && sudo apt-get install elasticsearch
 

Linux上でサービスとして実行:

インストール後、上記は起動しません。サービスとして開始する必要があります。 Elasticsearchを起動または停止する方法は、システムがSysV initを使用するかsystemdを使用するかによって異なります。次のコマンドで確認できます。

ps -p 1
 

あなたのディストリビューションがSysV initを使用している場合は、以下を実行する必要があります:

sudo update-rc.d elasticsearch defaults 95 10
sudo /etc/init.d/elasticsearch start
 

それ以外の場合は、あなたの配布物がsystemdを使用しています:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
 

ブラウザまたはRESTクライアントからCURL コマンドを実行して、Elasticsearchが正しくインストールされているかどうかを確認します。

curl -X GET http://localhost:9200/
 

WindowsでのElasticsearchのインストール

前提条件

Windows版のElasticsearchは、このリンクから入手できます: https : //www.elastic.co/downloads/elasticsearch 。最新の安定リリースは常に最上位にあります。

Windowsにインストールするときには、 .ZIP アーカイブが必要です。 [ Downloads: セクションのリンクをクリックし、ファイルをコンピュータに保存します。

このバージョンの弾性は「ポータブル」です。つまり、プログラムを使用するためにインストーラを実行する必要はありません。ファイルの内容を簡単に覚えている場所に解凍します。デモンストレーションのために、すべてをC:\elasticsearch 解凍したと仮定します。

アーカイブにはデフォルトでelasticsearch-<version> という名前のフォルダがあり、そのフォルダをC:\ に展開してelasticsearch 名前を変更するか、 C:\elasticsearch 自分で作成してアーカイブ内のフォルダの内容のみを解凍することができますそこへ。

ElasticsearchはJavaで書かれているため、Java Runtime Environmentが機能する必要があります。したがって、サーバーを実行する前に、コマンド・プロンプトを開いて次のように入力して、Javaが使用可能かどうかを確認してください。

java -version
 

次のような応答が得られるはずです。

java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) Client VM (build 25.91-b14, mixed mode)
 

代わりに次のように表示された場合

'java'は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。

Javaがシステムにインストールされていないか、または正しく構成されていません。 このチュートリアルに従うと Javaを(再)インストールできます。また、これらの環境変数が同様の値に設定されていることを確認してください。

変数
JAVA_HOME C:\ Program Files \ Java \ jre
パス ...; C:\ Program Files \ Java \ jre

これらの変数を調べる方法がわからない場合は、 このチュートリアルを参照してください

バッチファイルから実行

Javaをインストールしたら、 bin フォルダを開きます。すべてを解凍したフォルダ内で直接見つけることができるので、 c:\elasticsearch\bin はずです。このフォルダ内には、コマンドウィンドウでElasticsearchを起動するために使用できるelasticsearch.bat というファイルがあります。これは、プロセスによって記録された情報がコマンドプロンプトウィンドウに表示されることを意味します。サーバーを停止するには、 CTRL Cを押すか、単にウィンドウを閉じます。

Windowsサービスとして実行する

理想的には、開発中に削除できない余分なウィンドウを持つことは望ましくないため、Elasticsearchをサービスとして実行するように設定することができます。

Elasticsearchをサービスとしてインストールする前に、 C:\elasticsearch\config\jvm.options ファイルに行を追加する必要があります。

サービスインストーラは、サービスをインストールする前に、スレッドスタックサイズの設定をjvm.options 設定する必要があります。 32ビットWindowsでは-Xss320k [...]を追加し、64ビットWindowsでは-Xss1mjvm.options ファイルに追加する-Xss1m があります。 [ソース]

変更を加えたら、コマンドプロンプトを開き、次のコマンドを実行してbin ディレクトリに移動します。

C:\Users\user> cd c:\elasticsearch\bin
 

サービス管理はelasticsearch-service.bat によって処理されます。古いバージョンでは、このファイルは単にservice.bat と呼ばれることがあります。使用可能なすべての引数を表示するには、以下を実行します。

C:\elasticsearch\bin> elasticsearch-service.bat

Usage: elasticsearch-service.bat install|remove|start|stop|manager [SERVICE_ID]
 

また、オプションのSERVICE_ID 引数があることがわかりますが、現在は無視できます。サービスをインストールするには、次のコマンドを実行します。

C:\elasticsearch\bin> elasticsearch-service.bat install
 

サービスをインストールした後、それぞれの引数を使用してサービスを開始および停止できます。サービスを開始するには、

C:\elasticsearch\bin> elasticsearch-service.bat start
 

それを停止するには、実行する

C:\elasticsearch\bin> elasticsearch-service.bat stop
 

代わりにGUIを使用してサービスを管理する場合は、次のコマンドを使用できます。

C:\elasticsearch\bin> elasticsearch-service.bat manager
 

これによりElastic Service Managerが開きます。これにより、サービス関連の設定をカスタマイズし、最初のタブの下部にあるボタンを使用してサービスを停止/開始することができます。