前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch介绍

Elasticsearch介绍

原创
作者头像
CIKEY
修改2019-09-04 10:08:26
8090
修改2019-09-04 10:08:26
举报
文章被收录于专栏:进击的全栈进击的全栈

es是什么:

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。

Elasticsearch使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

es主要优点是:实现了分布式的实时文件存储和和分析搜索引擎,其中的每个字段都可以被索引搜索,并且易于扩容。

基本概念:

  • 文档:es是面向文档的,它以文档维度进行存储和搜索,支持索引文档的内容。es使用JSON格式作为文档序列化的格式。
  • 索引:在es中索引相当于关系型数据库中的数据库,每个索引可以有多个类型,每个类型包含多个文档,每个文档中又有多个字段。es与常见的关心型数据库的概念对比如下:
代码语言:javascript
复制
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices   -> Types  -> Documents -> Fields

对标我们的工程中,每条上报的数据就是一个文档,他们的类型就是doc类型,每条记录都会有自己的id。

es支持用api上传一条记录,PUT /{_index}/{_type}/{_id} ,路径中也可以不指定_id,使用es自动生成的自增id

(22个字符长的UUID))。

  • 搜索:执行HTTP GET请求,带上文档存储地址 /{_index}/{_type}/{_id} ,响应的数据包含_index, _type, _id, _version等元数据,原始的文档数据存储在_source字段中。

其他常用的检索:

GET /{_index}/{_type}/_search, 用_search取代_id时会返回所有记录。

GET /{_index}/{_id}/_search?q=last_name:Smith, q指定检索条件,这种是带参数查询,另外还可以用DSL语句查询,例如以下查询语句与上面的带参查询等效:

代码语言:javascript
复制
GET /{_index}/{_id}/_search
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}
  • 分析聚合:es的聚合功能支持在数据上生成复杂的统计分析。例如,将所有interests字段进行聚合,类似数据库中的group_by, 该聚合返回结果名称为all_interests:
代码语言:javascript
复制
GET /{_index}/{_id}/_search
{
  "aggs": {
    "all_interests": {
      "terms": { "field": "interests" }
    }
  }
}

es中的聚合也允许分级汇总,例如计算出各类interests的平均年龄:

代码语言:javascript
复制
GET /{_index}/{_id}/_search
{
    "aggs" : {
        "all_interests" : {
            "terms" : { "field" : "interests" },
            "aggs" : {
                "avg_age" : {
                    "avg" : { "field" : "age" }
                }
            }
        }
    }
}
  • 映射:

es中的数据可以分为两大类:确切值和全文文本,确切值只能精确匹配,全文文本可以进行分词模糊匹配。

各个字段及其类型信息保存在mapping中,可以在创建索引的时候指定映射,也可以稍后再新增映射,但是重要的是已经存在的字段,其类型不允许再修改。

kibana查询语法:

全文搜索和短语搜索:搜索栏直接输入hello world,会过滤出包含hello和world的所有文档,但是当输入“hello world”会过滤出包含该短语的文档。

字段搜索:field:value 为限定字段的全文搜索,field:"value"为限定字段的精确搜索;_exists_:field 文档中存在该字段,_missing_:field 文档中不存在该字段;

通配符:?匹配单个字符,*匹配0或多个字符,但是?和*不能作为第一个字符

范围搜索:[a TO b] {a TO b}, []包含端点,{}不包含端点

逻辑搜索:AND 与,OR 或,+ 搜索结果必须包含此项,- 搜索结果必须不能包含此项;例如:+name:张* -age:20, 过滤出姓张且不为20岁的同学;

分组搜索: (name: 张* OR city:深圳) AND age:20, 过滤出所有姓张和在深圳的20岁的同学

字段分组: field:()

转义字符: + - && || ! () {} [] ^" ~ * ? : \ 以上字符需要用 \ 转义

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • es是什么:
  • 基本概念:
  • kibana查询语法:
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com