TOP

分布式搜索引擎Elasticsearch的查询与过滤(一)
2017-10-13 10:21:36 】 浏览:7922
Tags:分布式 搜索引擎 Elasticsearch 查询 过滤

一、写入

先来一个简单的官方例子,插入的参数为-XPUT,插入一条记录。

curl -XPUT 'http://localhost:9200/test/users/1' -d '{
    "user": "test",
    "post_date": "2009-11-15T14:12:12",
    "message": "Elastic Search"
}'

{
    "_index": "test",
    "_type": "users",
    "_id": "1",
    "_version": 2,
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "created": false
}

从上面的这个例子中,可以看出ES的http的服务的默认端口9200,后面的/test/users/1是这条记录的索引部分,体现了它的RESTful风格

这三级目录分布对应了_index,_type,_id 实际上ES上存放的所有的记录都只能通过三级目录的方式找到

  • _id 字段可以是数字也可以是字符串。在执行上面的命令时ES会自动创建这些索引

  • -d 后面跟上了要插入的json格式的记录

  • -XPUT 表明这是插入一条数据,ES中叫创建一个索引

  • _version 字段,表明了当前记录的版本号,当你想这个索引重新put一条记录时,版本号会自动加一

二、删除

删除的http请求参数为-XDELETE,通过下面的命令可以删除这条记录:

curl -XDELETE 'http://localhost:9200/test/users/1?pretty'
{
  "found" : true,
  "_index" : "test",
  "_type" : "users",
  "_id" : "1",
  "_version" : 3,
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  }
}

删除这条记录的时候,_verison也会自动加一的。

三、查询

创建了一个索引后,可以通过下面的方式查询(参数-XGET)出来

curl -XGET 'http://localhost:9200/test/users/1?pretty'       
{
  "_index" : "test",
  "_type" : "users",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "user" : "test",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "Elastic Search"
  }
}

执行上面的查询命令,可以等到下面的结果,exists表示是否有查询结果,_source字段是查询到的记录。

查询的时候,可以将_type设置成为_all,ES就会返回在_index下所有type中,第一个匹配_id的记录,还可以通过参数对返回结果继续控制,

用fields选取返回的字段,用pretty控制返回的json格式是否更阅读友好

curl -XGET 'http://localhost:9200/test/users/1?fields=message,user&pretty=true'
{
  "_index" : "test",
  "_type" : "users",
  "_id" : "1",
  "_version" : 3,
  "found" : true,
  "fields" : {
    "message" : [ "Elastic Search" ],
    "user" : [ "test" ]
  }
}

format=yaml可以设置输入格式为YAML

curl -XGET 'http://localhost:9200/test/users/1?fields=message,user&format=yaml' 
---
_index: "test"
_type: "users"
_id: "1"
_version: 1
found: true
fields:
  message:
  - "Elastic Search"
  user:
  - "test"

当然ES还支持一次查询多组记录,即multi get,在URI中是使用关键字_mget,具体可以参考ES的文档multi get

四、更新

ES同样支持更新,但是更新的方式是通过一个提供的脚本进行的。

ES的做法是,通过index找到相应的存放记录的节点,然后执行脚本,执行完之后,返回新的索引。实际上执行的是一个get和reindex的过程,在这个过程中,通过versioning来控制没有其它的更新操作(这个功能是0.19后可用的)。具体实现的原理应该和elasticsearch Versioning相关。

get,reindex的含义是,ES先取出这条记录,然后根据新数据生成新记录,然后在把新记录放回到ES中(并不会覆盖老的记录)。

首先创建一条记录

curl -XPUT localhost:9200/test/type1/1 -d '{
    "counter" : 1,
    "tags" : ["red"]
}'

将counter的值加4

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
    "script" : "ctx._source.counter += count",
    "params"  
		

请关注公众号获取更多资料


分布式搜索引擎Elasticsearch的查询与过滤(一) https://www.cppentry.com/bencandy.php?fid=103&id=160772

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Centos7安装完毕后无法联网的解决.. 下一篇(转)tomcat进程意外退出的问题分析