Elasticsearch入門チュートリアルのインストールと基本的な使用

10193 ワード

ubuntu16.04+elasticsearch6.5を例に、公式サイトのドキュメントを参照https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html
Javaのインストール
参考記事:https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04
$ sudo apt-get update
$ sudo apt-get install -y default-jre
$ sudo add-apt-repository ppa:webupd8team/java && sudo apt-get update
$ sudo apt-get install oracle-java8-installer
$ export JAVA_HOME="/usr/lib/jvm/java-8-oracle"
$ java -version     #  java
$ echo $JAVA_HOME   #  java_home

Elasticsearch
インストール(6.5.4)
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.zip
$ unzip elasticsearch-6.5.4.zip

開始
$ cd elasticsearch-6.5.4/bin
$ ./elasticsearch   

起動時にvmを間違って報告する場合.maxmapcount[65530]is toolow実行は以下の通りです.
$ sudo sysctl -w vm.max_map_count=262144

curlテストでは、起動に成功し、正常にインストールされたことを示すメッセージが表示されます.
$ curl 127.0.0.1:9200   
{
  "name" : "c5skAub",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "bdkUuVtQSvWOiY_vXEFnvw",
  "version" : {
    "number" : "6.5.4",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "d2ef93d",
    "build_date" : "2018-12-17T21:17:40.758843Z",
    "build_snapshot" : false,
    "lucene_version" : "7.5.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}   

基礎概念
Elasticは現在の全文検索エンジンの第一選択であり、本質的に非関係型データベースであり、mysqlのいくつかの概念と比較すると以下の通りである.
Mysql
Elastic
database(データベース)
index(インデックス)
テーブル
type(タイプ、7.xは廃棄)
row(記録)
ドキュメント
column(フィールド)
fileds(フィールド)
きほんそうさ
Elasticの操作はrest apiで完了し、以下の操作はcurl -XMETHOD "http://localhost:9200" -H 'Content-Type: application/json' [-d 'request body']を省き、リモートアクセスをしたい場合は/path-to-elastic/config/elasticsearch.ymlnetwork.host: 0.0.0.0を修正して再起動すればよい.
操作インデックス
customerというindexを新規作成します.prettyは友好的なjsonに戻る
$ PUT /customer?pretty  

すべてのインデックスを表示
$ GET /_cat/indices?v 

索引の削除
$ DELETE /customer

操作ドキュメント
新しいidが1のdocumentは、typeが廃止されるため、indexごとに1つのtypeのみが含まれ、統一は_doc
$ PUT /customer/_doc/1?pretty
{
    "name": "luke"
}

postを使用し、idを空にするとランダムなidが生成されます.
$ POST /customer/_doc?pretty {"name": "php"}
{
    "_index": "customer",
    "_type": "_doc",
    "_id": "hIkkLGgBFVhvdLuiNNGD",  ##   id
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 3
}

ドキュメントの更新は新規作成と同じで、データを変更するか、
$ POST /customer/_doc/1/_update?pretty
{
    "doc": { "name": "luke44", "age": 24 }
}

簡単なスクリプト更新を使用して、ここのctx.sourceは、変更されるドキュメントを指します.
$ POST /customer/_doc/1/_update?pretty
{
  "script" : "ctx._source.age += 5"
}

クエリidが1のドキュメント
$ GET /customer/_doc/1?pretty
{
    "_index": "customer",
    "_type": "_doc",
    "_id": "1",
    "_version": 1,
    "found": true,
    "_source": {
        "name": "luke"
    }
}

ドキュメントの削除
$ DELETE /customer/_doc/2?pretty

一括操作、idが1と2のドキュメントを一括更新し、postmanでbodyが最後に1行空になる必要があることに注意します.
$ POST /customer/_doc/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "luke" }
{"index":{"_id":"2"}}
{"name": "php", "age": "20" }

idが1のドキュメントを更新し、idが2のドキュメントを削除します.
$ POST /customer/_doc/_bulk?pretty
{"update":{"_id":"1"}}
{"doc":{"name":"php best"}}
{"delete":{"_id":"2"}}

バッチ操作の1つが失敗した場合、他の操作は任意に実行され、終了時に実行順序に従ってステータスが返されます.
データの参照
仮想銀行の顧客アカウント情報データセットを準備します.このようなフォーマットのように、右クリックしてデータセットをダウンロードし、accounts.jsonとして保存してください.
{
    "account_number": 0,
    "balance": 16623,
    "firstname": "Bradshaw",
    "lastname": "Mckenzie",
    "age": 29,
    "gender": "F",
    "address": "244 Columbus Place",
    "employer": "Euron",
    "email": "[email protected]",
    "city": "Hobucken",
    "state": "CO"
}

データセットのインポート
$ POST /bank/_doc/_bulk?pretty&refresh --data-binary "@accounts.json"
$ GET /_cat/indices?v
health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   bank     3inMmuQzRqaTpMkzfh07_A   5   1       1000            0     95.9kb         95.9kb
yellow open   customer gSRgPG9cScKHcuycJE2drw   5   1          2            0      7.7kb          7.7kb

match_allクエリー
URI検索を使用すると、q=*はすべて一致し、sort=account_number:ascaccount_number昇順に配列されていることを示します.
$ GET /bank/_search?q=*&sort=account_number:asc&pretty
{
  "took" : 63,  //  ,  
  "timed_out" : false,  //    
  "_shards" : {     //  
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {    //  
    "total" : 1000,
    "max_score" : null,
    "hits" : [ {
      "_index" : "bank",
      "_type" : "_doc",
      "_id" : "0",
      "sort": [0],
      "_score" : null,
      "_source" : {"account_number":0,"balance":16623,"firstname":"Bradshaw","lastname":"Mckenzie","age":29,"gender":"F","address":"244 Columbus Place","employer":"Euron","email":"[email protected]","city":"Hobucken","state":"CO"}
    }, {
      "_index" : "bank",
      "_type" : "_doc",
      "_id" : "1",
      "sort": [1],
      "_score" : null,
      "_source" : {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"[email protected]","city":"Brogan","state":"IL"}
    }, ...
    ]
  }
}

jsonリクエストボディ検索を使用して、上記と同じ効果を取得します.
$ GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "account_number": "asc" }
  ]
}

結果バーの数をsizeとfromで制限し、mysqlのlimitとfromに似ています.使用_sourceクエリー指定フィールド
$ GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": { "balance": { "order": "desc" } },
  "from": 10,
  "size": 15,    //  10
  "_source": ["account_number", "balance"]
}

matchクエリー
クエリーaccount_numberが20のすべての口座
$ GET /bank/_search
{
  "query": { "match": { "account_number": 20 } }
}

クエリーaddressにmill単語が含まれているすべてのアカウント
$ GET /bank/_search
{
  "query": { "match": { "address": "mill" } }
}

クエリーaddressにmillまたはlane単語が含まれているすべてのアカウント
$ GET /bank/_search
{
  "query": { "match": { "address": "mill lane" } }
}

match_phraseクエリー、matchの変種、クエリーaddressにmill laneを含むすべてのアカウント
$ GET /bank/_search
{
  "query": { "match_phrase": { "address": "mill lane" } }
}

boolクエリー
クエリーaddressにはmilllaneの単語を含むすべてのアカウントが含まれています.bool must句は、ドキュメントを一致と見なすためにtrueでなければならないすべてのクエリーを指定します.
$ GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
      //"should": [...]    
      //"must_not": [...]    
    }
  }
}

年齢が40歳でID省に住んでいない顧客口座を検索する組み合わせ
$ GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "ID" } }
      ]
    }
  }
}

boolフィルタ
残高が20000~30000(含む)の顧客アカウントの照会
$ GET /bank/_search
{
  "query": {
    "bool": {
      "must": { "match_all": {} },
      "filter": {
        "range": {
          "balance": {
            "gte": 20000,
            "lte": 30000
          }
        }
      }
    }
  }
}

Elasticsearchは簡単で複雑なツールです.以上、その基礎知識と、いくつかのREST APIを使用してそれを処理する方法を理解してから、もっと高度な知識点を徐々に理解します.
転載先:https://www.cnblogs.com/luke44/p/elasticsearch-doc.html