elasticsearch初探

最近项目上稍微没那么紧迫,准备花点时间来学习下ea,作为后面的知识储备。

lz工作上也是主要处理一些数据处理及统计分析的工作,但是还没有远远达到海量级别的数据量级别,但是如果以后要往城市大脑发展的话,实时性及海量数据检索等方面估计会有一些要求。

ea从特点来说,属于一种非关系数据库,从数据存储格式及展现方式来说,以json的方式,能够很好的体现数据之间的关系,关系式数据库将数据拘束在table当中,使用时,又要组合起来形成对象,损失了对象的灵活性。

ea中数据都是可索引的,对于查找数据时,不同于关系数据库的b+树,他采用的是一种倒排的形式,数据组成方面,是index---type---document,分别对应关系数据库的database---table---row,ea这种的json方式,比较符合一般非关系数据库的存储方式,比如常常用到的mongodb,也是document这种形式。另外从扩展方面来说,横向扩展也是比较方便,可以很方便的增加其他ea节点,对于分布式系统来说是个很好的选择,同时,从故障恢复和节点备份方面来说,采用的是主分片和复制分片的策略,复制分片是主分片的完整复制,主分片故障时,其他复制分片通过选举的策略,都有可能成为主分片。

以上是我的一个比较粗浅的一个认识,下面简单说一下他的增删改查的一些操作。

1、add

PUT /megacorp/employee/2
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}

 2、query

GET /megacorp/employee/_search?q=last_name:Smith
GET /megacorp/employee/_search
{
   ...
   "hits": {
      "total":      2,
      "max_score":  0.30685282,
      "hits": [
         {
            ...
            "_source": {
               "first_name":  "John",
               "last_name":   "Smith",
               "age":         25,
               "about":       "I love to go rock climbing",
               "interests": [ "sports", "music" ]
            }
         },
         {
            ...
            "_source": {
               "first_name":  "Jane",
               "last_name":   "Smith",
               "age":         32,
               "about":       "I like to collect rock albums",
               "interests": [ "music" ]
            }
         }
      ]
   }
}

 

查询可以传递参数,也可以不传递参数,同时会返回命中结果及匹配度 

除此之外,ea还支持一种特有DSL语言来构建更加复杂的查询条件,比如分词匹配、区间查询 ,

GET /megacorp/employee/_search
{
    "query" : {
        "filtered" : {
            "filter" : {
                "range" : {
                    "age" : { "gt" : 30 } <1>
                }
            },
            "query" : {
                "match" : {
                    "last_name" : "smith" <2>
                }
            }
        }
    }
}

 上述语句过滤了姓氏为smith且年龄大于30的员工的记录。

3、update

PUT /website/blog/123
{
  "title": "My first blog entry",
  "text":  "I am starting to get the hang of this...",
  "date":  "2014/01/02"
}

更新无则创建,有则更新。

4、delete

 

DELETE /website/blog/123
{
  "found" :    true,
  "_index" :   "website",
  "_type" :    "blog",
  "_id" :      "123",
  "_version" : 3
}

 ea的响应体也是一种json格式,同时会返回符合rest规范的响应结果,状态码等信息

5、聚合

GET /megacorp/employee/_search
{
  "aggs": {
    "all_interests": {
      "terms": { "field": "interests" }
    }
  }
}
{
   ...
   "hits": { ... },
   "aggregations": {
      "all_interests": {
         "buckets": [
            {
               "key":       "music",
               "doc_count": 2
            },
            {
               "key":       "forestry",
               "doc_count": 1
            },
            {
               "key":       "sports",
               "doc_count": 1
            }
         ]
      }
   }
}

 除此之外,ea还有很多高级操作,比如分布式的增删改查、分片的细节、结构化等,后面再慢慢进行补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值