CentOS7 に ElasticSearch 6.4.1 をインストールするための詳細なチュートリアル

CentOS7 に ElasticSearch 6.4.1 をインストールするための詳細なチュートリアル

1. ElasticSearch 6.4.1 インストール パッケージを次の場所からダウンロードします。
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.1.tar.gz

2. 圧縮パッケージを解凍する

[root@localhost ElasticSearch]# tar -zxvf elasticsearch-6.4.1.tar.gz

3. ElasticSearchを起動する

[root@localhost bin]# ./elasticsearch

バックグラウンドモードで起動

[root@localhost bin]# ./elasticsearch -d

ヒント:

[root@localhost bin]# ./elasticsearch
[2018-09-19T19:46:09,817][WARN ][oebElasticsearchUncaughtExceptionHandler] [] スレッド [main] でキャッチされない例外
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: root として elasticsearch を実行できません
  org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:140) で ~[elasticsearch-6.4.1.jar:6.4.1]
  org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) で ~[elasticsearch-6.4.1.jar:6.4.1]
  org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) で ~[elasticsearch-6.4.1.jar:6.4.1]
  org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) で ~[elasticsearch-cli-6.4.1.jar:6.4.1]
  org.elasticsearch.cli.Command.main(Command.java:90) で ~[elasticsearch-cli-6.4.1.jar:6.4.1]
  org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.4.1.jar:6.4.1] で
  org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[elasticsearch-6.4.1.jar:6.4.1] で
原因: java.lang.RuntimeException: root として elasticsearch を実行できません
  org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) で ~[elasticsearch-6.4.1.jar:6.4.1]
  org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.4.1.jar:6.4.1] で
  org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:326) ~[elasticsearch-6.4.1.jar:6.4.1] で
  org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) で ~[elasticsearch-6.4.1.jar:6.4.1]

ElasticSearch はルート ユーザー ロールでは起動できないため、インストール ディレクトリを他のユーザーに許可し、他のユーザーで起動する必要があります。

起動が成功したら、確認し、新しいターミナルを開いて、次のコマンドを実行します。

[root@localhost ~]# curl 'http://localhost:9200/?pretty'
{
 「名前」:「O5BAVYE」、
 「クラスター名」:「elasticsearch」、
 "クラスタUUID" : "rw1yjlzkSgODXkUVgIxmxg",
 「バージョン」: {
  "番号" : "6.4.1",
  "build_flavor" : "デフォルト",
  "ビルドタイプ" : "tar",
  「ビルドハッシュ」:「e36acdb」、
  「ビルド日付」:「2018-09-13T22:18:07.696808Z」、
  "build_snapshot" : 偽、
  "lucene_version" : "7.4.0",
  "最小ワイヤ互換性バージョン" : "5.6.0",
  "最小インデックス互換性バージョン" : "5.0.0"
 },
 「タグライン」:「検索用です」
}
[root@localhost ~]# 

情報が返されればインストールは成功です!

4. Kibanaをインストールする

Sense は、ブラウザを通じて Elasticsearch に直接リクエストを送信するための対話型コンソールを提供する Kibana アプリケーションです。 この本のオンライン版には、多くのコード例が掲載されている View in Sense へのリンクが含まれています。クリックすると、コード例を含む Sense コンソールが開きます。 Sense をインストールする必要はありませんが、ローカル Elasticsearch クラスターでサンプル コードをテストできるため、本書がよりインタラクティブになります。

Kibanaをダウンロード

Kibana は、ElasticSearch が提供するデータ分析用の Web インターフェースです。ログを効率的に検索、視覚化、分析、その他の操作を実行するために使用できます。
https://artifacts.elastic.co/downloads/kibana/kibana-6.4.1-linux-x86_64.tar.gz

Kibanaをダウンロードして解凍する

[root@localhost ElasticSearch]# tar -zxvf kibana-6.4.1-linux-x86_64.tar.gz

configディレクトリのkibana.ymlファイルを変更し、elasticsearchアドレスとkibanaアドレス情報を設定します。

server.host: "192.168.92.50" # kibana サーバーのアドレス elasticsearch.url: "http://192.168.92.50:9200" # ES アドレス

Kibanaを起動する

[root@localhost bin]# ./kibana

Kibana ローカルアクセスをインストールします: http://localhost:5601/

開発ツールメニューを選択してリクエストを視覚化します

5. LogStashをインストールする

logStashをダウンロード
https://artifacts.elastic.co/downloads/logstash/logstash-7.0.1.tar.gz

ダウンロードして解凍したら、configディレクトリにあるログ収集ログ設定ファイルlogstash.confを設定します。

# シンプルなLogstash設定例
# Beats -> Logstash -> Elasticsearch パイプライン。

入力{
 TCP {
  モード => "サーバー"
  ホスト => "192.168.92.50"
  ポート => 4560
  コーデック => json_lines
 }
}
出力{
 エラスティックサーチ
  ホスト => "192.168.92.50:9200"
  インデックス => "springboot-logstash-%{+YYYY.MM.dd}"
 }
}

設定が成功したら、logstatshを起動します。

[root@localhost bin]# ./logstash -f ../config/logstash.conf

ES に関する基本的な知識:

インデックス(名詞):

前述したように、インデックスは、リレーショナル ドキュメントを保存する場所である従来のリレーショナル データベースのデータベースに似ています。 index の複数形は indices または indexes です。

インデックス(動詞):

ドキュメントのインデックス作成とは、ドキュメントを取得およびクエリできるように、ドキュメントをインデックス (名詞) に保存することを意味します。これは、SQL ステートメントの INSERT キーワードと非常によく似ていますが、古いドキュメントが既に存在する場合は新しいドキュメントが古いドキュメントを置き換える点が異なります。

逆インデックス:

リレーショナル データベースは、指定された列に B ツリー インデックスなどのインデックスを追加することで、データ取得速度を向上させます。 Elasticsearch と Lucene は、同じ目的を達成するために転置インデックスと呼ばれる構造を使用します。

PUT /メガコーポレーション/従業員/1
{
  "first_name" : "ジョン",
  "姓" : "スミス",
  「年齢」: 25,
  「概要」:「私はロッククライミングが大好きです」
  「興味」: [ 「スポーツ」、「音楽」 ]
}

戻り値:

#! 非推奨: 7.0.0 では、デフォルトのシャード数が [5] から [1] に変更されます。デフォルトの [5] シャードを引き続き使用したい場合は、インデックス作成リクエストまたはインデックス テンプレートでこれを管理する必要があります。
{
 "_index": "メガコーポレーション",
 "_type": "従業員",
 "_id": "1",
 "_バージョン": 1,
 「結果」: 「作成されました」、
 「_shards」: {
  「合計」: 2,
  「成功」: 1,
  「失敗」: 0
 },
 "_seq_no": 0,
 "_プライマリ_用語": 1
}

パス /megacorp/employee/1 には、次の 3 つの情報部分が含まれています。

メガコーポレーション インデックス名

従業員タイプ名

特定の従業員のID 1つ

2 番目の従業員情報を入力します。

{
 "_index": "メガコーポレーション",
 "_type": "従業員",
 "_id": "2",
 "_バージョン": 1,
 「結果」: 「作成されました」、
 「_shards」: {
  「合計」: 2,
  「成功」: 1,
  「失敗」: 0
 },
 "_seq_no": 0,
 "_プライマリ_用語": 1
}

戻り値:

{
 "_index": "メガコーポレーション",
 "_type": "従業員",
 "_id": "2",
 "_バージョン": 1,
 「結果」: 「作成されました」、
 「_shards」: {
  「合計」: 2,
  「成功」: 1,
  「失敗」: 0
 },
 "_seq_no": 0,
 "_プライマリ_用語": 1
}

3番目の従業員情報を配置する

{
 "_index": "メガコーポレーション",
 "_type": "従業員",
 "_id": "3",
 "_バージョン": 1,
 「結果」: 「作成されました」、
 「_shards」: {
  「合計」: 2,
  「成功」: 1,
  「失敗」: 0
 },
 "_seq_no": 0,
 "_プライマリ_用語": 1
}

5. ドキュメントを取得する

1人の従業員のデータを取得する

/megacorp/employee/1 を取得します。

戻り値:

{
 "_index": "メガコーポレーション",
 "_type": "従業員",
 "_id": "1",
 "_バージョン": 1,
 「見つかった」: true、
 "_ソース": {
  "first_name": "ジョン",
  "姓": "スミス",
  「年齢」: 25,
  "about": "私はロッククライミングが大好きです",
  「興味」: [
   「スポーツ」、
   "音楽"
  ]
 }
}

6. 軽量検索

GET は非常にシンプルで、指定されたドキュメントを直接取得します。 それでは、簡単な検索など、もう少し高度な操作を試してみましょう。

最初に試す検索は、ほぼ最も単純なものです。すべての従業員を検索するには、次のリクエストを使用します。

GET /megacorp/employee/_search

戻り値:

{
 「取った」: 31,
 "timed_out": 偽、
 「_shards」: {
  「合計」: 5,
  「成功」: 5,
  「スキップ」: 0,
  「失敗」: 0
 },
 「ヒット」: {
  「合計」: 3,
  "最大スコア": 1,
  「ヒット」: [
   {
    "_index": "メガコーポレーション",
    "_type": "従業員",
    "_id": "2",
    "_スコア": 1,
    "_ソース": {
     "first_name": "ジェーン",
     "姓": "スミス",
     「年齢」: 32,
     "about": "私はロックアルバムを集めるのが好きです",
     「興味」: [
      "音楽"
     ]
    }
   },
   {
    "_index": "メガコーポレーション",
    "_type": "従業員",
    "_id": "1",
    "_スコア": 1,
    "_ソース": {
     "first_name": "ジョン",
     "姓": "スミス",
     「年齢」: 25,
     "about": "私はロッククライミングが大好きです",
     「興味」: [
      「スポーツ」、
      "音楽"
     ]
    }
   },
   {
    "_index": "メガコーポレーション",
    "_type": "従業員",
    "_id": "3",
    "_スコア": 1,
    "_ソース": {
     "first_name": "ダグラス",
     "last_name": "モミ",
     「年齢」: 35,
     "about": "キャビネットを作るのが好きです",
     「興味」: [
      "林業"
     ]
    }
   }
  ]
 }
}

名前のあいまい一致で結果を取得する

GET /megacorp/employee/_search?q=last_name:スミス

戻り値:

{
 「取った」: 414,
 "timed_out": 偽、
 「_shards」: {
  「合計」: 5,
  「成功」: 5,
  「スキップ」: 0,
  「失敗」: 0
 },
 「ヒット」: {
  「合計」: 2,
  "最大スコア": 0.2876821,
  「ヒット」: [
   {
    "_index": "メガコーポレーション",
    "_type": "従業員",
    "_id": "2",
    "_スコア": 0.2876821,
    "_ソース": {
     "first_name": "ジェーン",
     "姓": "スミス",
     「年齢」: 32,
     "about": "私はロックアルバムを集めるのが好きです",
     「興味」: [
      "音楽"
     ]
    }
   },
   {
    "_index": "メガコーポレーション",
    "_type": "従業員",
    "_id": "1",
    "_スコア": 0.2876821,
    "_ソース": {
     "first_name": "ジョン",
     "姓": "スミス",
     「年齢」: 25,
     "about": "私はロッククライミングが大好きです",
     「興味」: [
      「スポーツ」、
      "音楽"
     ]
    }
   }
  ]
 }
}

7. クエリ式を使用して検索する

JSONリクエストの使用を指定するドメイン固有言語(DSL)

GET /megacorp/employee/_search
{
  「クエリ」: {
    "マッチ" : {
      "姓" : "スミス"
    }
  }
}

戻り値:

{
 「取った」: 7,
 "timed_out": 偽、
 「_shards」: {
  「合計」: 5,
  「成功」: 5,
  「スキップ」: 0,
  「失敗」: 0
 },
 「ヒット」: {
  「合計」: 2,
  "最大スコア": 0.2876821,
  「ヒット」: [
   {
    "_index": "メガコーポレーション",
    "_type": "従業員",
    "_id": "2",
    "_スコア": 0.2876821,
    "_ソース": {
     "first_name": "ジェーン",
     "姓": "スミス",
     「年齢」: 32,
     "about": "私はロックアルバムを集めるのが好きです",
     「興味」: [
      "音楽"
     ]
    }
   },
   {
    "_index": "メガコーポレーション",
    "_type": "従業員",
    "_id": "1",
    "_スコア": 0.2876821,
    "_ソース": {
     "first_name": "ジョン",
     "姓": "スミス",
     「年齢」: 25,
     "about": "私はロッククライミングが大好きです",
     「興味」: [
      「スポーツ」、
      "音楽"
     ]
    }
   }
  ]
 }
}

8. より複雑な検索

姓が Smith である従業員を検索しますが、今回はフィルター フィルターを使用して 30 歳以上の従業員のみを検索します。これにより、構造化クエリを効率的に実行できます。

GET /megacorp/employee/_search
{
  「クエリ」: {
    "ブール": {
      "しなければならない": {
        "マッチ" : {
          「姓」:「スミス」 
        }
      },
      "フィルター": {
        "範囲" : {
          「年齢」: { 「年齢」: 30 } 
        }
      }
    }
  }
}

範囲フィルターは、年齢が 30 を超えるドキュメントを検索します。gt は「より大きい」を表します。

戻り値:

{
 「取った」: 44,
 "timed_out": 偽、
 「_shards」: {
  「合計」: 5,
  「成功」: 5,
  「スキップ」: 0,
  「失敗」: 0
 },
 「ヒット」: {
  「合計」: 1,
  "最大スコア": 0.2876821,
  「ヒット」: [
   {
    "_index": "メガコーポレーション",
    "_type": "従業員",
    "_id": "2",
    "_スコア": 0.2876821,
    "_ソース": {
     "first_name": "ジェーン",
     "姓": "スミス",
     「年齢」: 32,
     "about": "私はロックアルバムを集めるのが好きです",
     「興味」: [
      "音楽"
     ]
    }
   }
  ]
 }
}

9. 全文検索

ロッククライミングが好きな従業員全員を検索

GET /megacorp/employee/_search
{
  「クエリ」: {
    "マッチ" : {
      「概要」:「ロッククライミング」
    }
  }
}

戻り値:

{
 「取った」: 17,
 "timed_out": 偽、
 「_shards」: {
  「合計」: 5,
  「成功」: 5,
  「スキップ」: 0,
  「失敗」: 0
 },
 「ヒット」: {
  「合計」: 2,
  "最大スコア": 0.5753642,
  「ヒット」: [
   {
    "_index": "メガコーポレーション",
    "_type": "従業員",
    "_id": "1",
    "_スコア": 0.5753642,
    "_ソース": {
     "first_name": "ジョン",
     "姓": "スミス",
     「年齢」: 25,
     "about": "私はロッククライミングが大好きです",
     「興味」: [
      「スポーツ」、
      "音楽"
     ]
    }
   },
   {
    "_index": "メガコーポレーション",
    "_type": "従業員",
    "_id": "2",
    "_スコア": 0.2876821,
    "_ソース": {
     "first_name": "ジェーン",
     "姓": "スミス",
     「年齢」: 32,
     "about": "私はロックアルバムを集めるのが好きです",
     「興味」: [
      "音楽"
     ]
    }
   }
  ]
 }
}

10. 全文検索

属性内の個々の単語を見つけることは問題ありませんが、単語やフレーズの正確なシーケンスを一致させたい場合もあります。 たとえば、「rock climbing」というフレーズに「rock」と「climbing」の両方が隣接して含まれる従業員レコードのみに一致するクエリを実行したいとします。

GET /megacorp/employee/_search
{
  「クエリ」: {
    「一致フレーズ」: {
      「概要」:「ロッククライミング」
    }
  }
}

戻り値:

{
 「取った」: 142,
 "timed_out": 偽、
 「_shards」: {
  「合計」: 5,
  「成功」: 5,
  「スキップ」: 0,
  「失敗」: 0
 },
 「ヒット」: {
  「合計」: 1,
  "最大スコア": 0.5753642,
  「ヒット」: [
   {
    "_index": "メガコーポレーション",
    "_type": "従業員",
    "_id": "1",
    "_スコア": 0.5753642,
    "_ソース": {
     "first_name": "ジョン",
     "姓": "スミス",
     「年齢」: 25,
     "about": "私はロッククライミングが大好きです",
     「興味」: [
      「スポーツ」、
      "音楽"
     ]
    }
   }
  ]
 }
}

11. ハイライト検索

多くのアプリケーションでは、ドキュメントがクエリと一致する理由をユーザーに知らせるために、各検索結果のテキストの一部を強調表示することを好みます。 Elasticsearch で強調表示されたスニペットを取得することも簡単です。

パラメータを追加: ハイライト

GET /megacorp/employee/_search
{
  「クエリ」: {
    「一致フレーズ」: {
      「概要」:「ロッククライミング」
    }
  },
  「ハイライト」: {
    「フィールド」: {
      "について" : {}
    }
  }
}

結果を返します:

{
 「取った」: 250,
 "timed_out": 偽、
 「_shards」: {
  「合計」: 5,
  「成功」: 5,
  「スキップ」: 0,
  「失敗」: 0
 },
 「ヒット」: {
  「合計」: 1,
  "最大スコア": 0.5753642,
  「ヒット」: [
   {
    "_index": "メガコーポレーション",
    "_type": "従業員",
    "_id": "1",
    "_スコア": 0.5753642,
    "_ソース": {
     "first_name": "ジョン",
     "姓": "スミス",
     「年齢」: 25,
     "about": "私はロッククライミングが大好きです",
     「興味」: [
      「スポーツ」、
      "音楽"
     ]
    },
    「ハイライト」: {
     "について": [
      「ロッククライミングが大好きです」
     ]
    }
   }
  ]
 }
}

ハイライトモジュールはハイライト属性です

12. 分析

Elasticsearch には、データに基づいて高度な分析結果を生成できる集計と呼ばれる機能があります。集計は SQL の GROUP BY に似ていますが、より強力です。

たとえば、従業員の間で最も人気のある趣味を調べるには、次のようにします。

GET /megacorp/employee/_search
{
 「ああ」: {
  「すべての関心事」: {
   "用語": { "フィールド": "興味" }
  }
 }
}

戻り値:

{
  ...
  「ヒット」: { ... },
  「集計」: {
   「すべての関心事」: {
     「バケット」: [
      {
        "キー": "音楽",
        「ドキュメント数」: 2
      },
      {
        「キー」:「林業」、
        「ドキュメント数」: 1
      },
      {
        "キー": "スポーツ",
        「ドキュメント数」: 1
      }
     ]
   }
  }
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Centos7 仮想マシンに elasticsearch5.0.x をインストールする詳細な説明 - インストール

<<:  JavaScript 戦略パターンを使用してフォームを検証する方法

>>:  MySQLの権限とインデックスの詳細な説明

推薦する

ローカル フォルダー内の画像を読み込んで表示するための HTML サンプル コード

一つの目的Html ページでローカル フォルダーを選択すると、フォルダーとそのサブフォルダー内のすべ...

Linux での syslogd および syslog.conf ファイルの解釈

1: syslog.conf の概要異なるタイプの Unix の場合、標準の UnixLog システ...

ドメイン名を介してプロジェクトにアクセスするnginx + tomcatの例

ドメイン名を使ってプロジェクトにアクセスする方法が気になったのですが、自分でドメイン名を取得するのは...

MySQL でグループ化した後、各グループの最大値を取得する詳細な例

MySQL でグループ化した後、各グループの最大値を取得する詳細な例1. テストデータベーステーブル...

VMware ESXi のインストールと使用記録(ダウンロード付き)

目次1. ESXiをインストールする2. ESXiをセットアップする3. ESXiを起動するESXi...

スクロールバーを非表示にしながらもスクロール効果を維持する純粋な CSS (モバイルと PC)

携帯モバイル ページは Chrome および Safari とのみ互換性があればよいため、カスタム ...

数百万のデータボリュームに対する MySQL ページングクエリ方法とその最適化の提案

データベース SQL の最適化はよくある問題です。何百万ものデータ ボリュームに対してページング ク...

Win10 での MySQL 8.0 ログインでユーザー 'root'@'localhost' のアクセスが拒否される (パスワード使用: YES) 問題の解決方法

最近、MySQL を学び始めました。インストールはスムーズに進み、インターネット上の既成のチュートリ...

sqlite3 から mysql に移行するときに起こりうる問題のコレクション

簡単な説明適切な読者: モバイル開発sqlite3 データを mysql に移行する場合、多くの構文...

CocosCreator最適化DrawCallの詳細な説明

目次序文ドローコールとはDrawCall はパフォーマンスにどのような影響を与えますか?ドローコール...

js はランダムロールコールを実装します

この記事では、ランダムロールコールを実装するためのjsの具体的なコードを参考までに共有します。具体的...

Webフロントエンドスキル概要(個人の実務経験)

1. 今日、ページを作っているときに、矢印を中央に配置する効果に遭遇しました。クリック領域を大きくし...

Dockerfile を使用して Docker イメージをカスタマイズする方法

Dockerfile を使用したイメージのカスタマイズイメージのカスタマイズとは、実際には各レイヤー...

HTML の基礎必読 - CSS スタイルシートの包括的な理解

CSS (カスケーディング スタイル シート) は、HTML Web ページを美しくするために使用さ...

JavaScript ES 新機能ブロックスコープ

目次1. ブロックスコープとは何ですか? 2. ブロックスコープが必要なのはなぜですか? 3. 関数...