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の権限とインデックスの詳細な説明

推薦する

Vue 円形パーセンテージ プログレスバー コンポーネントの機能の実装

必要な方はどなたでも参考にしてください。試してみて問題が見つかった場合は、メッセージを残してお知らせ...

MySQL 5.7.23 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

MySQLインストーラをダウンロードする公式ダウンロードアドレス: http://dev.mysq...

Dockerfile における ENV 命令の具体的な使用法の詳細な説明

1. Dockerfile 内の ENV 命令は、イメージの環境変数を定義するために使用されます。次...

画像マーキー効果を実現するネイティブJS

今日は、ネイティブ JS で実装された画像マーキー効果を紹介します。効果は次のとおりです。 実装され...

純粋な CSS3 で蝶が羽ばたく様子を再現する例

純粋なCSS3で蝶が羽ばたく様子を再現。まずはその効果をご覧ください どうですか?効果はかなりいいで...

ウェブページでコンテンツを引用するためによく使われるHTMLタグをマスターする

長い引用には blockquote を、短い引用には q を、参考文献には cite を使用します。...

json.stringify() と json.parse() の違いと使い方

1. JSON.stringify() と JSON.parse() の違い私たちは皆、JSON.s...

Vueは、センシティブな単語フィルタリングコンポーネントを検出するためのさまざまなアイデアを実装しています。

目次前面に書かれた要件分析 v1アイデア1: インターセプションメソッドを使用して入力ボックスの入力...

CentOS 7 環境でソースコードから MySQL 5.7 をインストールする方法

この記事では、CentOS 7 環境でソース コードから MySQL 5.7 をインストールする方法...

Nest.js のハッシュと暗号化の例の詳細な説明

0x0 はじめにまず、ハッシュアルゴリズムとは何でしょうか?メッセージやセッション項目など、一部のデ...

VUE+SpringBootはページング機能を実装します

この記事では主に、Vue + SpringBoot でページ分割されたリストデータを実装する方法を紹...

Docker で ElasticSearch と Kibana をインストールするためのサンプル コード

1. はじめにElasticsearchは現在非常に人気があり、多くの企業が利用しているため、esを...

WeChatアプレットはビデオプレーヤーのビデオコンポーネントを使用します

この記事の例では、WeChatアプレットのビデオプレーヤーコンポーネントの具体的なコードを参考までに...

Linux環境でグラフデータベースneo4jを構築する方法の説明

Neo4j (Nosql の 1 つ) は、高性能なグラフ データベース (分散をサポートしていませ...