Elasticsearchインストールと基本操作 for ubuntu


Elasticsearchインストールと基本操作

インストール編 (on Ubuntu18.04)

ElasticSearch Install

install Java
$ sudo apt install openjdk-11-jdk

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

$ sudo systemctl start elasticsearch
$ sudo systemctl status elasticsearch

確認
$ curl http://127.0.0.1:9200

Kibana Install

$ apt update
$ apt install kibana

$ systemctl start kibana

確認
access http://localhost:5601

kuromoji Install

$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji

CRUD編

bookというインデックスを作成、ドキュメントをひとつ作成。

PUT /book/_doc/1
{
    "title":"ビジネスPython超入門",
    "author":"中島省吾",
    "publisherName":"日経BP",
    "salesDate":"2019年6月7日",
    "itemPrice":"2592"
}
ドキュメントIDを指定せずに自動生成

PUT /book/_doc
{
    "title":"ビジネスPython超入門",
    "author":"中島省吾",
    "publisherName":"日経BP",
    "salesDate":"2019年6月7日",
    "itemPrice":"2592"
}
ドキュメントIDは20桁のランダムな英数字になる
ドキュメントの取得

GET /book/_doc/1
ドキュメントを更新

POST /book/_update/1
{
  "doc": {
    "itemPrice": 1292
  }
}
ドキュメントを削除

DELETE /book/_doc/1
インデックスを削除

GET /book/_mapping
マッピング(スキーマのようなもの)を確認

GET /book/_mapping
インデックスを作成

PUT /book
マッピングを指定してインデックスを作成

PUT /book
{
  "mappings": {
    "properties": {
      "title": { "type": "keyword" },
      "author": { "type": "keyword" },
      "publisherName": { "type": "keyword" },
      "isbn" : { "type": "keyword" },
      "itemCaption" : { "type": "text" },
      "itePrice" : { "type": "long"}
    }
  }
}
複数のドキュメントを一度に作成

POST /book/_bulk 
{"index": {"_id": 1}} 
{ "title": "退屈なことはPythonにやらせよう", "author": "Al Sweigart/相川愛三","publisherName":" オライリー・ジャパン", "isbn":" 9784873117782", "itemCaption":"ファイル名の変更や表計算のデータ更新といった作業は、日々の仕事の中で頻繁に発生します。ひとつふたつ修正するだけであれば問題ないのですが、それが数十、数百となってくると手に負えません。そのような単純な繰り返し作業はコンピュータに肩代わりしてもらうとすごくラクになります。本書では、手作業だと膨大に時間がかかる処理を一瞬でこなすPython3プログラムの作り方について学びます。対象読者はノンプログラマー。本書で基本をマスターすれば、プログラミング未経験者でも面倒な単純作業を苦もなくこなす便利なプログラムを作れるようになります。さらに、章末の練習問題を解くことで、類似のタスクを自動処理するスキルをもっと高めることができます。", "itemPrice": 3996 }
{"index": {"_id": 2}} 
{ "title":" ビジネスPython超入門","author":"中島省吾","publisherName":" 日経 BP","isbn":" 9784296102136","itemCaption":" ビジネスに欠かせないプログラミングの基本スキルが学べる!人工知能で注目の言語、Pythonを初歩から解説。書き方から実行手順までステップ・バイ・ステップ。条件分岐や繰り返しなどの必須構文を着実にマスター。ネットの情報を自動取得、Webスクレイピングの基礎。手書き文字を認識する機械学習をゼロから体験。","itemPrice": 2592} 
{"index": {"_id": 3}} 
{ "title":"入門Python","author":" ビル・ルバノビック/ 斎藤 康 毅","publisherName":" オライリー・ジャパン"," isbn":" 9784873117386","itemCaption":"Pythonが誕生して四半世紀。データサイエンスやウェブ開発、セキュリティなどさまざまな分野でPythonの人気が急上昇中です。プログラミング教育の現場でもCに代わってPythonの採用が増えてきています。本書は、プログラミングが初めてという人を対象に書かれた、Pythonの入門書です。前提とする知識は特にありません。プログラミングおよびPythonの基礎からウェブ、データベース、ネットワーク、並行処理といった応用まで、Pythonプログラミングをわかりやすく丁寧に説明します。","itemPrice": 3996}
{"index": {"_id": 4}} 
{ "title":" 新・明解Python入門","author":"柴田望洋","publisherName":"SBクリエイティブ","isbn":"9784815601522","itemCaption":"適切なサンプルプログラム299編と分かりやすい図表165点で、Pythonの文法とプログラミングの基礎を系統立てて着実に学習できます。","itemPrice": 2808}
{"index": {"_id": 5}} 
{ "title":"独学プログラマーPython言語の基本から仕事のやり方まで","author":" コーリー・アルソフ/ 清水川 貴之"," publisherName":" 日経BP"," isbn":"9784822292270"," itemCaption":"オブジェクト指向、シェル、正規表現、パッケージ管理、バージョン管理、データ構造、アルゴリズム、仕事の見つけ方・やり方。Python言語の基本から仕事のやり方まで、プログラマーとして働くために必要な知識・ノウハウが1冊で丸わかり。","itemPrice": 2376}
ドキュメントに項目を追加

POST /book/_update/5
{
  "doc": {
    "discountRate": 0
  }
}

検索編

すべてのドキュメントを検索

GET /book/_searh

GET book/_search
{
    "query": {
    "match_all": {}
  }
}
指定した単語を含むドキュメントを検索

GET book/_search
{
  "query": {
    "match": {
      "itemCaption": "プログラミング"
    }
  }
}
and条件でドキュメントを検索

GET book/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "itemCaption": "プログラミング"
          }
        },
        {
          "match": {
            "itemCaption": "入門"
          }
        }
      ]
    }
  }
}
not検索(ある単語を含まない)

GET book/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "itemCaption": "入門"
          }
        }
      ]
    }
  }
}
or検索

GET book/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "itemCaption": "プログラミング"
          }
        },
        {
          "match": {
            "itemCaption": "入門"
          }
        }
      ]
    }
  }
}
特定の単語を重み付けして検索

GET book/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "itemCaption": {
              "query": "プログラミング"
            }
          }
        },
        {
          "match": {
            "itemCaption": {
              "query": "入門",
              "boost": 5
            }
          }
        }
      ]
    }
  }
}
ハイライト検索

GET book/_search
{
  "query": {
    "match": {
      "itemCaption": "プログラミング"
    }
  },
  "highlight": {
    "fields": {
      "itemCaption": {}
    }
  }
}
範囲での絞り込み検索およびソート

GET book/_search
{
  "query": {
    "range": {
      "itemPrice": {
        "lte": 3000
      }
    }
  },
  "sort": [
    {
      "itePrice": {
        "order": "asc"
      }
    }
  ]
}
アグリゲーションを利用して統計データを作成

プログラミングを含むデータを値段範囲ごとにアイテム数を集計


GET book/_search
{
  "query": {
    "match": {
      "itemCaption": "プログラミング"
    }
  }, 
  "aggregations": {
    "itemPrice_bucket": {
      "range": {
        "field": "itemPrice",
        "ranges": [
          {
            "key": "0-1500", 
            "from": 0,
            "to": 1500
          },
          {
            "key": "1501-3000",
            "from": 1501,
            "to": 3000
          },
          {
            "key": "3000-4500",
            "from": 3001,
            "to": 4500
          }
        ]
      }
    }
  }
}