5文档接口

创建或者更新接口
PUT twitter/tweet/1
{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}

结果为
{
    "_shards" : {
        "total" : 2,
        "failed" : 0,
        "successful" : 2
    },
    "_index" : "twitter",
    "_type" : "tweet",
    "_id" : "1",
    "_version" : 1,
    "created" : true,
    "result" : created
}

_shards节点代表副本信息
total:副本总数(包括住数据节点)
successful代表成功总数
failed一个包括失败节点的数组

如果索引定义没有创建,则默认会创建一份索引定义。如果想要关闭则在setting处设置action.auto_create_index为false。同样如果想关闭自动创建列关系设置,可以设置index.mapper.dynamic为false

上面是使用id为的例子,如果希望id自动生成。
POST twitter/tweet/
{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}

返回
{
    "_shards" : {
        "total" : 2,
        "failed" : 0,
        "successful" : 2
    },
    "_index" : "twitter",
    "_type" : "tweet",
    "_id" : "6a8ca01c-7896-48e9-81cc-9f70661fcb32",
    "_version" : 1,
    "created" : true,
    "result": "created"
}
发现他自动生成了一个id。
默认数据会根据id进行hash到某一个数据节点。(如果想自己控制这个hash值的话,可以通过添加参数?routing=kimchy)
可以给一个文档设置父节点。之后子节点数据会自动和父节点路由到一个数据节点。
当数据写入时,可以定义至少几个数据节点写入,才会返回(除非超时)。默认为主节点,但是可以通过动态设置
index.write.wait_for_active_shards
来改变。
或者在请求中添加参数wait_for_active_shards来改变(正确的数值为all或者自然数)。
如果想要定义过期时间可以再访问请求中添加参数:timeout=5m(5分钟)

获取接口
GET twitter/tweet/0
返回
{
    "_index" : "twitter",
    "_type" : "tweet",
    "_id" : "0",
    "_version" : 1,
    "found": true,
    "_source" : {
        "user" : "kimchy",
        "date" : "2009-11-15T14:12:12",
        "likes": 0,
        "message" : "trying out Elasticsearch"
    }
}
上述是获取twitter索引下的type为twitter的id为0的数据
同样判断他是否存在也可以使用
HEAD twitter/tweet/0


如果希望返回的数据不包括_source ,则请求参数添加_source=false
如果希望对_source里面的数据进行过滤
GET twitter/tweet/0?_source_include=*.id&_source_exclude=entities
。如果只有包含的话
GET twitter/tweet/0?_source=*.id,retweeted

使用
/{index}/{type}/{id}/_source
可以直接获取到文档信息如:
GET twitter/tweet/1/_source


可以控制那个数据节点执行请求。默认为随机的访问。可以设置为_primary,_local以及自定义。
删除接口
删除id为1的数据
DELETE 'http://localhost:9200/twitter/tweet/1'

当然也可以添加routing参数指示请求落到那个数据节点上。

根据搜索删除
POST twitter/twitter/_delete_by_query
{
  "query": { 
    "match": {
      "message": "some message"
    }
  }
}

这种条件语句和查询语句写法一样
如果想要在整个索引中搜索数据并删除的数据
POST twitter/_delete_by_query

如果要垮多个索引
POST twitter,blog/tweet,post/_delete_by_query


默认上面的删除会只删除1000条记录。同样可以自己定制删除记录数
POST twitter/_delete_by_query?scroll_size=5000

同样参数除了支持pretty外,还支持refresh, wait_for_completion, wait_for_active_shards, 和 timeout参数
refresh表示请求处理完成后会进行刷新内容
wait_for_completion=false会执行一些检查,然后返回一个任务(可以再任务接口中进行控制)。
wait_for_active_shards表示必须有多少个存活的副本才执行
timeout表示每个请求等待数据节点可用的时间
返回信息
{
  "took" : 639,
  "deleted": 0,
  "batches": 1,
  "version_conflicts": 2,
  "retries": 0,
  "throttled_millis": 0,
  "failures" : [ ]
}

took代表消耗时间
deleted成功删除的文章数
batches查询删除返回的总数目

任务接口了解(https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html)
更新接口
先获取文档,然后写会数据。通过版本来确保数据没有在中间被修改过
方法同创建

如果想部分更新文档可以采用如下方式
POST test/type1/1/_update
{
    "doc" : {
        "name" : "new_name"
    }
}

根据搜索更新
这个借口需要慎重使用(https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html)
多个条件获取多条数据
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-multi-get.html
复杂接口(bulk api)
就是一个接口中可以糅合修改,删除,添加等操作(https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html)

数据重建(reindex api)
数据重建只是将数据从一个索引复制到另外一个索引中。(但是数据定义还是需要重新自己定义)如下:将所有twitter中的文章复制到new_twitter中
POST _reindex
{
  "source": {
    "index": "twitter"
  },
  "dest": {
    "index": "new_twitter"
  }
}

返回类似
{
  "took" : 147,
  "timed_out": false,
  "created": 120,
  "updated": 0,
  "deleted": 0,
  "batches": 1,
  "version_conflicts": 0,
  "noops": 0,
  "retries": {
    "bulk": 0,
    "search": 0
  },
  "throttled_millis": 0,
  "requests_per_second": -1.0,
  "throttled_until_millis": 0,
  "total": 120,
  "failures" : [ ]
}

更细致的需求(https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html)

猜你喜欢

转载自fenshen6046.iteye.com/blog/2366227