ElasticSearch的基本概念:
Index
类似于mysql数据库中的database
Type
类似于mysql数据库中的table表,es中可以在Index中建立type(table),通过mapping进行映射(6.0的版本不允许一个index下面有多个type,并且官方说是在接下来的7.0版本中会删掉type)
Document
由于es存储的数据是文档型的,一条数据对应一篇文档即相当于mysql数据库中的一行数据row,一个文档中可以有多个字段也就是mysql数据库一行可以有多列
Field
es中一个文档中对应的多个列与mysql数据库中每一列对应
Mapping
可以理解为mysql或者solr中对应的schema,只不过有些时候es中的mapping增加了动态识别功
能
indexed
就是名义上的建立索引
Query DSL
类似于mysql的sql语句,只不过在es中是使用的json格式的查询语句,专业术语就叫:QueryDSL GET/PUT/POST/DELETE
1、节点
#查看节点信息
curl -XGET 'http://127.0.0.1:9200/_cat/nodes?v'
#查看所有节点信息
curl -XGET 'http://127.0.0.1:9200/_nodes?pretty=true'
#查看指定节点的信息
curl -XGET 'http://127.0.0.1:9200/_nodes/nodeName?pretty=true'
2、索引
#查看所有索引
curl -XGET 'http://localhost:9200/_cat/indices?v'
#创建索引
curl -XPUT "http://localhost:9200/test_index"
#创建索引,指定分片和副本的数量
curl -H "Content-Type: application/json" -XPUT "http://localhost:9200/test_index?pretty" -d'
{
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
}
}'
#创建索引(test_index)、创建类型(product)、指定mapping的数据
curl -H "Content-Type: application/json" -XPUT "http://localhost:9200/test_index?pretty" -d'
{
"mappings": {
"product" : {
"properties": {
"id" : {
"type": "text",
"index": "false"
},
"userName" : {
"type": "text",
"index": "true"
}
}
}
}
}'
#在已创建的索引下添加类型的mapping
curl -H "Content-Type: application/json" -XPUT 'http://localhost:9200/test_index/person/_mapping?pretty' -d '{
"person" : {
"properties" : {
"date" : {
"type" : "long"
},
"name" : {
"type" : "text",
"index" : "false"
},
"status" : {
"type" : "integer"
},
"type" : {
"type" : "integer"
}
}
}
}'
#获取索引信息
curl -XGET "http://localhost:9200/test_index?pretty"
#查看索引的统计信息
curl -XGET "http://localhost:9200/test_index/_stats?pretty"
#获取索引的mappings
curl -XGET "http://localhost:9200/test_index/_mappings?pretty"
#删除索引
curl -XDELETE "http://localhost:9200/test_index"
3、文档
#插入数据
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/person/?pretty' -d '{"date":11222, "name": "abc", "status": 1,"type":134}'
#查询索引中的全部内容
curl -XGET "http://localhost:9200/test_index/_search?pretty"
#查询某个type的内容
curl -XGET "http://localhost:9200/test_index/person/_search?pretty"
#根据文档的id查询文档,如果需要查询多个字段使用逗号进行隔开,不指定就是显示全部字段
curl -XGET "http://localhost:9200/test_index/person/zbyJjXYB2UzVbYB2ykZa?_source=name,type&pretty"
#根据条件进行简单查询
curl -XGET "http://localhost:9200/test_index/person/_search?q=name:&pretty"
#更新文档内容
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/person/0LyYjXYB2UzVbYB2qUZi/_update?pretty' -d '{"doc":{ "name": "wxg111", "status": 1,"type":134}}'
#删除文档内容
curl -XDELETE "http://localhost:9200/test_index/person/zryOjXYB2UzVbYB2AkbI?&pretty"
4、DSL
#查询索引下所有文档
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/_search?pretty' -d '{"query": { "match_all": {} }}'
#查询索引下所有文档,并返回第一个文档
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/_search?pretty' -d '{"query": { "match_all": {} },"size":1}'
#匹配所有并返回第1到10
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/_search?pretty' -d '{"query": { "match_all": {} },"from": 0,"size": 10}'
#根据属性降序排序(size未指定默认为10)
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/_search?pretty' -d '{"query": { "match_all": {} },"sort": {"status": { "order": "desc" }}}'
#返回name和status这2个fields(_source里),相当于sql:SELECT name, status FROM....
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/_search?pretty' -d '{"query": { "match_all": {} },"_source": ["name", "status"]}'
#返回status为1的,相当于sql的WHERE
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/_search?pretty' -d '{"query": { "match": { "status": 1 } }}'
#返回type=77 && status=1的文档
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/_search?pretty' -d '{"query": {"bool": {"must": [{ "match": { "type": 77 } },{ "match": { "status": 1 } }]}}}'
#返回type=77 || status=1的文档
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/_search?pretty' -d '{"query": {"bool": {"should": [{ "match": { "type": 77 } },{ "match": { "status": 1 } }]}}}'
#返回type=77 非 status=1的文档
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/_search?pretty' -d '{"query": {"bool": {"must_not": [{ "match": { "type": 77 } },{ "match": { "status": 1 } }]}}}'
#返回type是134但status不是2的
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/_search?pretty' -d '{"query": {"bool": { "must": [{ "match": { "type": 134 } }],"must_not": [{ "match": { "status": 2 } }]}}}'
# 相当于sql: SELECT COUNT() from bank GROUP BY state ORDER BY COUNT() DESC。
#「size=0」是设置不显示search hit
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/_search?pretty' -d '{"size": 0,"aggs": {"group_by_state": {"terms": {"field": "status"}}}}'
#按state分组并计算(组)平均balance(默认返回前10个按state的COUNT的降序(DESC)排)
curl -H "Content-Type: application/json" -XPOST 'http://localhost:9200/test_index/_search?pretty' -d '{"size": 0,"aggs": {"group_by_state": {"terms": {"field": "status"},"aggs": {"average_balance": {"avg": {"field": "type"}}}}}}'