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

推薦する

MySQL 5.7 で業務を停止せずに従来のレプリケーションを GTID レプリケーションに変更する例

GTID の利点により、従来のファイル POS ベースのレプリケーションを GTID ベースのレプリ...

JavaScript進捗管理の詳しい説明

目次序文質問原理テスト序文プログラムを作成するときに、読み込みの進行状況やアップロードの進行状況など...

詳細なアイデアを備えたシンプルな計算機の HTML 実装

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

win10 での mysql 8.0.16 winx64 インストールの最新グラフィック チュートリアル

このデータベースをダウンロードするには、多くの時間とトラフィックがかかります。踏み込んだ落とし穴で時...

IDEA が MySQL データベースに接続できない問題の 6 つの解決策

この記事では、IDEA が MySQL データベースに接続できない問題に対する 6 つの解決策を主に...

ElementUI の el-dropdown に複数のパラメータを実装する方法

最近、業務上のボタンの増加により、ページレイアウトにボタンが多すぎて、ページが美しくなく、ユーザーエ...

CSSはコンテンツの高さが足りない場合にフッターを自動的に下部に固定します

UI カットのプロセスでは、ページはヘッダー、コンテンツ、フッターの 3 つの部分で構成されることが...

HTML、CSS、JSコメントの標準的な使用法の概要

必要なコメントを追加することは、責任感と道徳心のあるフロントエンド開発者が持つべき良い習慣であり、コ...

mysql-8.0.11-winx64.zip の詳細なインストール チュートリアル

zip インストール パッケージをダウンロードします。 MySQL8.0 For Windows z...

MySQL 5.7のワンクリックインストールとパスワードポリシーの変更方法

1.Mysqlスクリプトのワンクリックインストール [root@uat01 ~]# cat Inst...

美容・スタイリングウェブサイト向けのカラーマッチングテクニックと効果表示

色はあらゆるウェブサイトにとって最も重要な要素の 1 つであり、閲覧者に大きな影響を与えるため、色の...

nginx を使用して静的リソース サーバーを構築する方法

Windows を例にとると、Linux も実際には同じです。静的リソースサーバーを構築するパソコン...

Vueは書籍ショッピングカートの機能を実現

この記事の例では、書籍ショッピングカート機能を実現するためのVueの具体的なコードを参考までに共有し...

Vueはdivホイールのズームインとズームアウトを実装します

Vue プロジェクトで div ホイールのズームインとズームアウト、ドラッグ効果、キャンバス効果に似...

HTMLページ内の検索機能を完了する

最近、たくさんの人に改変してもらったフレームワークに取り組んでいます。毎日コードを見ていると目が回り...