经常使用的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と対比)