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# ORGET 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/
