经常使用的ElasticSearch查询(文档操作)

由于ElasticSearch的手册(英文版)非常详细,请参考该手册。
手册(官方)链接:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

首先,我会尽量简明易懂地将MySQL的SQL语句与之进行比较,然后做总结。

环境

    • CentOS 7.1

 

    • ElasticSearch 5.6.2

 

    ※ElasticSearch 6.xでは、curlに「 -H ‘Content-Type: application/json’」を付ける必要があります。

Table of contents

    • インデックス(マッピング)操作

 

    • ドキュメント(レコード)操作

 

    • データ取得

 

    • スナップショット

 

    elasticdump(インポート/エクスポート)

文档(记录)操作

当指定_id时的注册方法。

curl -XPUT http://localhost:9200/hoge_index/hoge_type/2 -d '{
 "field_01": "hoge1",
 "field_02": "hoge2",
 "field_03": "hoge3"
}'

如果_id=2存在数据,则执行与MySQL中的UPDATE相当的操作;如果没有数据,则执行与MySQL中的INSERT相当的操作。

INSERT INTO `hoge_index` . `hoge_type` (`_id`, `field_01`, `field_02`, `field_03`) 
VALUES (2, 'hoge1', 'hoge2', 'hoge3')
UPDATE `hoge_index` . `hoge_type` SET 
  `field_01` = 'hoge1', 
  `field_02` = 'hoge2', 
  `field_03` = 'hoge3'
WHERE `_id` = 2

■ 不指定_id的注册方法

在MySQL中所指的auto_increment。

curl -XPOST http://localhost:9200/hoge_index/hoge_type/ -d '{
 "field_01": "hoge1",
 "field_02": "hoge2",
 "field_03": "hoge3"
}'
INSERT INTO `hoge_index` . `hoge_type` (`field_01`, `field_02`, `field_03`) 
VALUES ('hoge1', 'hoge2', 'hoge3')

■ 如何更新某些列

curl -XPOST http://localhost:9200/hoge_index/hoge_type/2/_update -d '{
  "doc": {
    "field_01": "hoge1_upd"
  }
}'
UPDATE `hoge_index` . `hoge_type` SET 
  `field_01` = 'hoge1_upd'
WHERE `_id` = 2

■ 指定条件下批量更新数据

请将类型设定为”hoge_type”。

curl -XPOST 'http://localhost:9200/hoge_index/_update_by_query?conflicts=proceed&pretty' -d '{
  "query": {
    "term": {
      "field_03": {
        "value": "hoge3"
      }
    }
  },
  "script": {
    "inline": "ctx._source.field_01 = \"Hoge hoge\""
  }
}'
UPDATE `hoge_index` . `hoge_type` SET
  `field_01` = 'Hoge hoge'
WHERE 
  `field_03` = 'hoge3'

■ 批量更新到另一列的值。

请将类型设置为”hoge_type”。

curl -XPOST 'http://localhost:9200/hoge_index/_update_by_query?conflicts=proceed&pretty' -d '{
  "query": {
    "term": {
      "field_03": {
        "value": "hoge3"
      }
    }
  },
  "script": {
    "inline": "ctx._source.field_02 = ctx._source.field_01"
  }
}'
UPDATE `hoge_index` . `hoge_type` SET
  `field_02` = `field_01`
WHERE 
  `field_03` = 'hoge3'

■ 无需指定条件即可批量更新数据

※设定类型为”hoge_type”。

curl -XPOST 'http://localhost:9200/hoge_index/_update_by_query?conflicts=proceed&pretty' -d '{
  "query": {
    "match_all": { }
  },
  "script": {
    "inline": "ctx._source.field_01 = \"Hoge\"; ctx._source.field_02 = \"\";"
  }
}'
UPDATE `hoge_index` . `hoge_type` SET
  `field_01` = 'Hoge', 
  `field_02` = ''

■ 通过指定条件来进行批量删除数据

请将类型设为”hoge_type”。

curl -XPOST 'http://localhost:9200/hoge_index/_delete_by_query?conflicts=proceed&pretty' -d '{
  "query": {
    "term": {
      "field_03": {
        "value": "hoge3"
      }
    }
  }
}'
DELETE FROM `hoge_index` . `hoge_type`
WHERE 
  `field_03` = 'hoge3'

■ 批量更新数据而不指定条件

将类型设置为”hoge_type”。

curl -XPOST 'http://localhost:9200/hoge_index/_delete_by_query?conflicts=proceed&pretty' -d '{
  "query": {
    "match_all": { }
  }
}'
DELETE FROM `hoge_index` . `hoge_type`

or 

TRUNCATE `hoge_index` . `hoge_type`

请参考

    • elasticsearch-php documents

http://qiita.com/4cteru/items/074d8dc956103c36b7fa (bulkについて)

https://qiita.com/kieaiaarh/items/5ea4e8a188bd9814000d (SQLと対比)

广告
将在 10 秒后关闭
bannerAds