ElasticSearch入门

目录

1、ElasticSearch简介

2、ElasticSearch特点

3、操作索引

3.1.基本概念

4、查询

3.1.基本查询:

3.1.1 查询所有(match_all)

3.1.2 匹配查询(match)

3.1.4 词条匹配(term)

3.1.5 多词条精确匹配(terms)

3.2.结果过滤

3.2.1.直接指定字段

3.2.2.指定includes和excludes

3.3 高级查询

3.3.1 布尔组合(bool)

3.3.2 范围查询(range)

3.5 排序

3.4.1 单字段排序

3.4.2 多字段排序


1、ElasticSearch简介

ElasticSearch:一个开源的分布式搜索和分析引擎

 Elastic有一条完整的产品线:

Elasticsearch 分布式的搜索和分析引擎构建在Apache Lucene库之上

Kibana 数据可视化和仪表盘的工具

Logstash 数据收集,转换和传输工具

这三个就是大家常说的ELK技术栈

2、ElasticSearch特点

  • 分布式,无需人工搭建集群

  • Restful风格,一切API都遵循Rest原则,容易上手

  • 近实时搜索,数据更新在Elasticsearch中几乎是完全同步的。

Elasticsearch和MySQL的区别

数据模型:Elasticsearch 是一个基于 Lucene 的搜索引擎,MySQL 是一个关系型数据库管理系统(RDBMS)
索引和搜索:Elasticsearch 使用倒排索引作为主要的索引结构。MySQL 使用 B+树作为主要的索引结构。
性能和扩展性:Elasticsearch 是一个面向搜索(search)的数据库系统,它支持近实时(near real-time)的索引和查询,以保证数据操作的及时性和灵活性。MySQL 是一个面向事务(transaction)的数据库系统,它支持 ACID 特性(原子性、一致性、隔离性、持久性),以保证数据操作的正确性和完整性。

倒排索引

创建倒排索引是对正向索引的一种特殊处理,流程如下:

  • 将每一个文档的数据利用算法分词,得到一个个词条
  • 创建表,每行数据包括词条、词条所在文档id、位置等信息
  • 因为词条唯一性,可以给词条创建索引,例如hash表结构索引

3、操作索引

3.1.基本概念

Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。

对比关系:

索引(indices)------------------Databases 数据库

类型(type)----------------------Table 数据表

文档(Document)-------------Row 行

字段(Field)---------------------Columns 列

详细说明:

概念说明
索引库(indices)indices是index的复数,代表许多的索引,
类型(type)类型是模拟mysql中的table概念,一个索引库下可以有不同类型的索引,比如商品索引,订单索引,其数据格式不同。不过这会导致索引库混乱,因此未来版本中会移除这个概念
文档(document)存入索引库原始的数据。比如每一条商品信息,就是一个文档
字段(field)文档中的属性
映射配置(mappings)字段的数据类型、属性、是否索引、是否存储等特性

是不是与Lucene和solr中的概念类似。

另外,在SolrCloud中,有一些集群相关的概念,在Elasticsearch也有类似的:

  • 索引集(Indices,index的复数):逻辑上的完整索引

  • 分片(shard):数据拆分后的各个部分

  • 副本(replica):每个分片的复制

4、查询

我们从4块来学查询:

  • 基本查询

  • _source过滤

  • 结果过滤

  • 高级查询

  • 排序

3.1.基本查询:

基本语法

GET /索引库名/_search
{
    "query":{
        "查询类型":{
            "查询条件":"查询条件值"
        }
    }
}

这里的query代表一个查询对象,里面可以有不同的查询属性

  • 查询类型:

    • 例如:match_all, matchterm , range 等等

  • 查询条件:查询条件会根据类型的不同,写法也有差异,后面详细讲解

3.1.1 查询所有(match_all)

示例:

GET /aa/_search
{
    "query":{
        "match_all": {}
    }
}
  • query:代表查询对象

  • match_all:代表查询所有

3.1.2 匹配查询(match)

示例:

GET /aa/_search
{
    "query":{
        "match":{
            "xxx":"xxx"
        }
    }
}

3.1.4 词条匹配(term)

term 查询被用于精确值 匹配,这些精确值可能是数字、时间、布尔或者那些未分词的字符串

GET /aa/_search
{
    "query":{
        "term":{
            "xxx":"xxx"
        }
    }
}

3.1.5 多词条精确匹配(terms)

terms 查询和 term 查询一样,但它允许你指定多值进行匹配。如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件:

GET /aa/_search
{
    "query":{
        "terms":{
            "xxx":[xxx,xxx,xxx]
        }
    }
}

3.2.结果过滤

默认情况下,elasticsearch在搜索的结果中,会把文档中保存在_source的所有字段都返回。

如果我们只想获取其中的部分字段,我们可以添加_source的过滤

3.2.1.直接指定字段

示例:

GET /blb/_search
{}
{
  "_source": ["xxx","xxx"],
  "query": {
    "term": {
      "xxx": "xxx"
    }
  }
}

3.2.2.指定includes和excludes

我们也可以通过:

  • includes:来指定想要显示的字段

  • excludes:来指定不想要显示的字段

二者都是可选的。

示例:

GET /blb/_search
{
  "_source": {
    "includes":["xxx","xxx"]
  },
  "query": {
    "term": {
      "xxx": "xxx"
    }
  }
}

与下面的结果将是一样的:

GET /aa/_search
{
  "_source": {
     "excludes": ["xxx"]
  },
  "query": {
    "term": {
      "xxx": "xxx"
    }
  }
}

3.3 高级查询

3.3.1 布尔组合(bool)

bool把各种其它查询通过must(与)、must_not(非)、should(或)的方式进行组合

GET /aa/_search
{
    "query":{
        "bool":{
            "must":     { "match": { "xxx": "xxx" }},
            "must_not": { "match": { "xxx":  "xxx" }},
            "should":   { "match": { "xxx": "xxx" }}
        }
    }
}

3.3.2 范围查询(range)

range 查询找出那些落在指定区间内的数字或者时间

GET /aa/_search
{
    "query":{
        "range": {
            "xxx": {
                "gte":  1000.0,
                "lt":   2800.00
            }
        }
    }
}

range查询允许以下字符:

操作符说明
gt大于
gte大于等于
lt小于
lte小于等于

3.5 排序

3.4.1 单字段排序

sort 可以让我们按照不同的字段进行排序,并且通过order指定排序的方式

GET /aa/_search
{
  "query": {
    "match": {
      "xxx": "xxx"
    }
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

3.4.2 多字段排序

假定我们想要结合使用 price和 _score(得分) 进行查询,并且匹配的结果首先按照价格排序,然后按照相关性得分排序:

GET /blb/_search
{
    "query":{
        "bool":{
            "must":{ "match": { "XXX": "xxxx" }},
            "filter":{
                "range":{"price":{"gt":2000,"lt":3000}}
            }
        }
    },
    "sort": [
      { "price": { "order": "desc" }},
      { "_score": { "order": "desc" }}
    ]
}

  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值