# encoding:utf8
from datetime import datetime
from elasticsearch import Elasticsearch
import elasticsearch.helpers
import random
es = Elasticsearch(['172.18.1.22:9200', '172.18.1.23:9200', '172.18.1.24:9200', '172.18.1.25:9200', '172.18.1.26:9200'])
es.indices.create(index='test_index', ignore=400)
#es.index(index="skynet_social_twitter_v6", doc_type="test-type", id=42, body={"any": "data", "timestamp": datetime.now()})
package = []
for i in range( 10 ):
row = {
"@timestamp":datetime.now().strftime( "%Y-%m-%dT%H:%M:%S.000+0800" ),
"count" : random.randint( 1, 100 )
}
package.append( row )
actions = [
{
'_op_type': 'index',
'_index': "test_index",
'_type': "test-type",
'_source': d
}
for d in package
]
elasticsearch.helpers.bulk( es, actions )
他人博客总结的:他人总结的es使用小结
给索引取别名,这样告诉使用者别名就ok了。
curl -XPOST 'http://172.18.1.22:9200/_aliases' -d
{
"actions": [
{"add": {"index": "info-test", "alias": "wyl"}}
]
}
移除别名:
curl -XPOST 'http://localhost:9200/_aliases' -d
{
"actions": [
{"remove": {"index": "test1", "alias": "alias1"}}
]
}
重命名一个别名就是一个简单的remove然后add的操作,也是使用相同的API。这个操作是原子的。
重命名:
curl -XPOST 'http://localhost:9200/_aliases' -d '
{
"actions": [
{"remove": {"index": "test1", "alias": "alias1"}},
{"add": {"index":"test1", "alias": "alias2"}}
]
}'
将一个别名同多个的索引关联起来:
curl -XPOST 'http://localhost:9200/_aliases' -d '
{
"actions": [
{"add": {"index": "test1", "alias":"alias1"}},
{"add": {"index": "test2", "alias":"alias1"}}
]
}'
向一个指向多个索引的别名去索引数据会引发一个错误。
1、查看集群的所有节点
http://172.24.5.149:9200/_cat/nodes?v
2、查看集群的健康情况
http://172.24.5.149:9200/_cat/health?v
3、查看集群中所有的索引
http://172.24.5.149:9200/_cat/indices?v
4、删除info-test索引
curl -XDELETE 'http://172.24.5.149:9200/info-test'
5、创建info-test索引
curl -XPUT 'http://172.24.5.149:9200/info-test'
6、向索引中插入一个ID为1的文档
curl -XPUT "localhost:9200/info-test/people/1?
{
"name": "John Doe"
}"
7、在没有ID的情况下向索引中插入文档,ES会随机生成一个ID:
curl -XPOST "localhost:9200/info-test/people?
{
"name": "John Doe"
}"
8、根据ID查询文档
curl -XGET 'localhost:9200/info-test/people/1?
9、更新ID为1的文档,将name字段的值改为Jane Doe
curl -XPOST "localhost:9200/info-test/people/1/_update?
{
"doc": { "name": "Jane Doe" }
}"
10、更新ID为1的文档,将name字段的值改为Jane Doe,同时加上age字段
curl -XPOST "localhost:9200/info-test/people/1/_update?
{
"doc": { "name": "Jane Doe", "age": 20 }
}
11、通过脚本来执行,给ID为1的文档的age属性值加5
curl -XPOST "localhost:9200/info-test/people/1/_update?
{
"script" : "ctx._source.age += 5"
}"
在上面的例子中,ctx._source指向当前要被更新的文档。
12、删除ID为2的文档
curl -XDELETE "localhost:9200/info-test/people/2?"
可以设置超时时间
curl -XDELETE 'http://localhost:9200/twitter/tweet/1?timeout=5m'
13、删除名字中包含“John”的所有文档
curl -XDELETE "localhost:9200/info-test/people/_query?
{
"query": { "match": { "name": "John" } }
}
14、批量插入ID为1和ID为2的文档
curl -XPOST 'localhost:9200/info-test/people/_bulk? {"index":{"_id":"1"}}{"name": "John Doe" }{"index":{"_id":"2"}}{"name": "Jane Doe" }'
15、批量更新ID为1的文档,删除ID为2的文档
curl -XPOST 'localhost:9200/customer/external/_bulk?
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}'
16、搜索info-test索引中的所有文档
curl 'localhost:9200/info-test/_search?q=*'
17、使用POST请求体搜索info-test索引中的所有文档
curl -XPOST 'localhost:9200/info-test/_search?
{
"query": { "match_all": {} }
}'
18、使用POST请求体搜索info-test索引中的所有文档,但只要求返回一个文档(默认返回10个)
curl -XPOST 'localhost:9200/info-test/_search?
{
"query": { "match_all": {} },
"size": 1
}'
19、使用POST请求体搜索info-test索引中的所有文档,返回第11到第20个文档
curl -XPOST 'localhost:9200/info-test/_search?
{
"query": { "match_all": {} },
"from": 10,
"size": 10
}'
如果不指定from的值,它默认就是0。
20、使用POST请求体搜索info-test索引中的所有文档并按照name属性降序排列
curl -XPOST 'localhost:9200/info-test/_search?
{
"query": { "match_all": {} },
"sort": { "name": { "order": "desc" } }
}'
21、使用POST请求体搜索info-test索引中的所有文档,但是只要求返回部分字段
curl -XPOST 'localhost:9200/info-test/_search?
{
"query": { "match_all": {} },
"_source": ["age", "name"]
}'
22、使用POST请求体搜索info-test索引中age属性值为20的文档
curl -XPOST 'localhost:9200/info-test/_search?
{
"query": { "match": { "age": 20 } }
}
23、使用POST请求体搜索info-test索引中address属性值包含mill lane的文档.(Jane Doe相当于一个短语)
curl -XPOST 'localhost:9200/info-test/_search?
{
"query": { "match_phrase": { "address": "mill lane" } }
}'
24、使用POST请求体搜索info-test索引中address属性值包含”mill”和”lane”的文档
curl -XPOST 'localhost:9200/info-test/_search?
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}'
must:and。 should: or。 must_not:非。
25、使用POST请求体搜索info-test索引中balance的属性值在2000大于等于20000并且小于等于30000的文档
curl -XPOST 'localhost:9200/info-test/_search?
{
"query": {
"filtered": {
"query": { "match_all": {} },
"filter": {
"range": {
"balance": {
"gte": 20000,
"lte": 30000
}
}
}
}
}
}'
26、使用POST请求体搜索info-test索引中的文档,并按照state属性分组
curl -XPOST ‘localhost:9200/info-test/_search?
{
"size": 0,
"aggs": {
"group_by_state": {
"terms": {
"field": "state"
}
}
}
}'
响应(其中一部分)是:
"hits" : {
"total" : 1000,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"group_by_state" : {
"buckets" : [ {
"key" : "al",
"doc_count" : 21
}, {
"key" : "tx",
"doc_count" : 17
}, {
"key" : "id",
"doc_count" : 15
}, {
"key" : "ma",
"doc_count" : 15
}, {
"key" : "md",
"doc_count" : 15
}, {
"key" : "pa",
"doc_count" : 15
}, {
"key" : "dc",
"doc_count" : 14
}, {
"key" : "me",
"doc_count" : 14
}, {
"key" : "mo",
"doc_count" : 14
}, {
"key" : "nd",
"doc_count" : 14
} ]
}
}
}
27、 在先前聚合的基础上,现在这个例子计算了每个州的账户的平均余额
curl -XPOST 'localhost:9200/bank/_search?
{
"size": 0,
"aggs": {
"group_by_state": {
"terms": {
"field": "state"
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
}
}'
28、基于前面的聚合,现在让我们按照平均余额进行排序:
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"size": 0,
"aggs": {
"group_by_state": {
"terms": {
"field": "state",
"order": {
"average_balance": "desc"
}
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
}
}'
29、使用年龄段(20-29,30-39,40-49)分组,然后在用性别分组,然后为每一个年龄段的每一个性别计算平均账户余额:
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"size": 0,
"aggs": {
"group_by_age": {
"range": {
"field": "age",
"ranges": [
{
"from": 20,
"to": 30
},
{
"from": 30,
"to": 40
},
{
"from": 40,
"to": 50
}
]
},
"aggs": {
"group_by_gender": {
"terms": {
"field": "gender"
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
}
}
}
}'
30、给已有的mapping新增一个字段
POST /information/_mapping/email1
{
"properties": {
"name": {
"type": "text",
"index": "analyzed"
}
}
}
31、设置索引的setting
PUT /atom/_settings
{
"settings": {
"index.mapping.total_fields.limit": 4000
},
"index": {
"refresh_interval": "30s",
"number_of_replicas":"0"
}
}
32、查看指定type的mapping(如果不指定type,则查看index下面所有type的mapping)
GET /atom/_mapping/人类
33、条件更新_update_by_query
POST /index/type/_update_by_query?conflicts=proceed
{
"script": {
"inline": "ctx._source.ontology_type=(params.tag)",
"lang": "painless",
"params": {
"tag": "event"
}
},
"query": {
"match_all": {}
}
}
34、查询某个type下面的所有数据
POST /atom/欧洲排球锦标赛/_search
{
"query": {
"match_all": {}
}
}
35、创建文档的时候带版本号
PUT twitter/tweet/1?version=2
{
"message" : "elasticsearch now has versioning support, double cool!"
}
version类型:internal、external or external_gt、external_gte
36、创建文档的时候带op_type参数
PUT twitter/tweet/1?op_type=create
{
"user" : "kimchy",
"post_date" : "2011-11-15T14:12:12",
"message" : "trying out Elasticsearch"
}
或者
PUT twitter/tweet/1/_create
{
"user" : "kimchy",
"post_date" : "2011-11-15T14:12:12",
"message" : "trying out Elasticsearch"
}
37、创建文档的时候自动生成id字段
POST twitter/tweet/
{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elasticsearch"
}
38、创建文档的时候指定路由字段
POST twitter/tweet?routing=kimchy
{
"user" : "kimchy",
"post_date" : "2011-11-15T14:12:12",
"message" : "trying out Elasticsearch"
}
39、创建文档时设置超时时间
PUT twitter/tweet/1?timeout=5m
{
"user" : "kimchy",
"post_date" : "2011-11-15T14:12:12",
"message" : "trying out Elasticsearch"
}
40、查询时不要source字段
GET twitter/tweet/0?_source=false
41、查询时选择source中的字段
GET twitter/tweet/0?_source_include=*.id&_source_exclude=entities
或者
GET twitter/tweet/0?_source=*.id,retweeted
42、只获取source里面的字段
GET twitter/tweet/1/_source
也可以选择source里面的部分字段
GET twitter/tweet/1/_source?_source_include=*.id&_source_exclude=entities'
43、自定义routing
GET twitter/tweet/2?routing=user1
创建文档的时候指定了routing的话,查询时候也要带上routing
44、给指定的type创建mapping
POST /information/_mapping/email1
{
"properties": {
"name": {
"type": "text",
"index": "analyzed"
}
}
}
45、delete_by_query
POST atom_v3/news/_delete_by_query?conflicts=proceed
{
"query": {
"match": {
"docType": "news"
}
}
}
46、强制合并索引的segment
POST atom_v3/_forcemerge?max_num_segments=5
47、查看某个索引的segments
http://172.24.8.83:9200/atom_v3/_segments
或者
http://172.24.8.83:9200/_cat/segments/atom_v3
48、创建索引的同时创建mapping
PUT my_index
{
"mappings": {
"user": {
"_all": {
"enabled": false
},
"properties": {
"title": {
"type": "text"
},
"name": {
"type": "text"
},
"age": {
"type": "integer"
}
}
},
"blogpost": {
"_all": {
"enabled": false
},
"properties": {
"title": {
"type": "text"
},
"body": {
"type": "text"
},
"user_id": {
"type": "keyword"
},
"created": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
}
}
}
}
}
49、reindex:index之间的数据导入
POST _reindex
{
"source": {
"index": "twitter"
},
"dest": {
"index": "new_twitter"
}
}