CURD
增加与修改
POST twitter/doc/1
{
"name":"jack",
"age":30
}
$ curl -H 'Content-Type: application/json' http://localhost:9200/twitter/doc/1?pretty -d '{"name":"jack","age":30}'
按文档查询
GET twitter/doc/1
$ curl http://localhost:9200/twitter/doc/1?pretty
修改
全部修改
PUT twitter/doc/1
{
"name":"jack",
"age":35
}
$ curl -XPUT -H 'Content-Type: application/json' http://localhost:9200/twitter/doc/1?pretty -d '{"name":"jack","age":35}'
部分修改
POST twitter/doc/1/_update
{
"doc" : {
"name" : "mark"
}
}
$ curl -H 'Content-Type: application/json' http://localhost:9200/twitter/doc/1/_update?pretty -d '{"doc":{"name":"mark"}}'
删除
DELETE twitter/doc/1
$ curl -XDELETE http://localhost:9200/twitter/doc/1?pretty
高级搜索
先增加一点数据
POST twitter/doc/1
{
"name":"jack",
"age":30
}
POST twitter/doc/2
{
"name":"mark",
"age":35
}
通过名称来查询:
GET twitter/_search?q=jack
# OR
GET twitter/_search?q=35
$ curl http://localhost:9200/twitter/_search?q=jack&pretty=true
$ curl http://localhost:9200/twitter/_search?q=35&pretty=true
上述 GET twitter/_search?q=jack
的 Response Body:
{
"took": 51,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.2876821,
"hits": [
{
"_index": "twitter",
"_type": "doc",
"_id": "1",
"_score": 0.2876821,
"_source": {
"name": "jack",
"age": 30
}
}
]
}
}
hits
就是我们搜索返回的结果,total
是搜索命中的结果总数,下面的hits
是本次返回的部分搜索结果,是一个数组结构,里面是具体的索引文档
还能限定查询字段:
GET twitter/_search?q=age:35
$ curl http://localhost:9200/twitter/_search?q=age:35&pretty=true
还能使用 QueryDSL 来写查询表达式:
GET twitter/_search
{
"query": {
"match": {
"age": 35
}
}
}
$ curl -XGET -H 'Content-Type: application/json' http://localhost:9200/twitter/_search?pretty -d '{"query":{"match":{"age":35}}}'
聚合的使用
在使用聚合之前在加一点数据:
POST twitter/doc/3
{
"name":"john",
"age":30
}
POST twitter/doc/4
{
"name":"mark",
"age":40
}
统计年龄的分布情况,可以用下面的查询语句:
GET twitter/_search
{
"size": 0,
"aggs": {
"age_stats": {
"terms": {
"field": "age",
"size": 10
}
}
}
}
$ curl -XGET -H 'Content-Type: application/json' http://localhost:9200/twitter/_search?pretty -d '{"size":0, "aggs": {"age_stats": {"terms": {"field": "age", "size": 10}}}}'
最外层的
size
为0
这样可以不返回搜索命中的文档,只返回聚合的统计结果,aggs
就是我们描述聚合查询语句根节点,我们使用terms
聚合类型来对age
字段的值进行统计,并且只返回前10
个统计值,然后这些统计结果我们命名为age_stats
上述的返回结果:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations": {
"age_stats": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 30,
"doc_count": 2
},
{
"key": 35,
"doc_count": 1
},
{
"key": 40,
"doc_count": 1
}
]
}
}
}
可以看到查询返回的 JSON 里面包含了表示聚合结果的
aggregations
节点,下面有我们的统计结果age_stats
,下面buckets
表示聚合的具体值key
和统计数据doc_count
,也就是各个年龄分别有多少个文档,出现了多少次。
参考链接
https://elastic-search-in-action.medcl.com/2.basic/elasticsearch_quick_start/