ElasticSearch浅谈

了解ELK

ELK是ElasticSearch、Logstash 、 Kibana三大开源框架首字母大写简称。

了解ElasticSearch

ElasticSearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。

下载安装

下载elasticsearch-7.6.1
下载elasticsearch-head-master
启动elasticsearch.bat

启动可能会报错 , 报错需要在elasticsearch-7.6.1\config\elasticsearch.yml这个文件中配置xpack.ml.enabled: false
通过head连接elasticSarch会报错跨域
跨域解决 , 在elasticsearch-7.6.1\config\elasticsearch.yml配置文件中配置

http.cors.enabled: true
http.cors.allow-origin: "*"

在这里插入图片描述

了解Kibana

Kibana是一个针对ElasticSearch的开源分析及可视化平台,用来搜索、查看交互存储在ElasticSearch索引中的数据。使用Kibnan,可以通过各种图表进行高级数据分析展示。

安装Kibana

下载后解压就可以
解压后运行bin目录下面的 .bat文件
在这里插入图片描述
浏览器访问即可

打开是英文界面 , 这时我们就需要汉化 , 那么怎么汉化呢

在kibana-7.6.1-windows-x86_64\config目录下的kibana.yml配置文件最后加上下面的那行代码

i18n.locale: "zh-CN"

ES的核心概念

  1. ElasticSearch是面向文档的
  2. ElasticSearch的几个概念
  3. 索引: 相当于关系型数据库的数据库
  4. types: 相当于关系型数据库的表 , 被遗弃了
  5. 文档:相当于关系型数据库的行
  6. 字段: 相当于关系型数据库的列
    ElasticSearch在后台把每个索引划分成多个分片 , 每个分片可以在集群中的不同服务器间迁移
    一个也是集群 , 默认集群名称就是ElasticSearch

Ik分词器

  1. 下载:https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v6.3.2
  2. 解压到elasticsearch-7.6.1\plugins这个目录下
  3. 重启ElasticSearch
  4. 可以通过 命令 elasticsearch-plugin list来查看插件是否安装成功
  5. 使用Kibana调试

IK分词器提供了两个分词算法:ik_smart 和 ik_max_word

其中的ik_smart为最少切分 , ik_max_word为最细粒度划分

使用Kinban测试
在这里插入图片描述
默认分词器中的分词效果不够 , 像姚云峰这样的词实际上是一个词 , 但是分词器却没能识别 , 把姚云峰三个字也全部都分开了 , 这样情况下我们该怎么办?

Ik分词器增加自己的配置
在这里插入图片描述

关于索引的操作

创建索引
PUT /索引名/类型名/文档id
{请球体}
在这里插入图片描述
Put的索引的类型

  • 字符串类型
    • text 、 keyword
  • 数值类型
    • long 、 integer 、 short 、 byte 、 double 、 float 、 half 、 float 、 scaled 、 float
  • 日期类型
    • date
  • 布尔值类型
    • boolean
  • 二进制类型
    • binary

指定字段类型,创建索引的具体规则
在这里插入图片描述

PUT /test2
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "long"
      }
    }
  }
}

获取索引规则
在这里插入图片描述
get 索引名

如果自己的文档没有指定 , 那么ES就会给我们默认配置字段类型

通过GET _cat/indices?v命令查看ES当前的一些信息

更新索引
POST调用或PUT调用

PUT调用 , 创建和原来索引一样的索引进行覆盖


PUT /test3/_doc/1
{
  "name": "张三",
  "age": 13
}


PUT /test3/_doc/1/
{
  "name": "李四",
  "age": 15
}

POST修改索引

PUT /test3/_doc/1
{
  "name": "张三",
  "age": 13
}


POST /test3/_doc/1/_update
{
  "doc": {
    "name": "55",
    "age": 26
  }
}

删除索引的名称

DELETE 索引名称

在这里插入图片描述

文档的基本操作

基本操作

给文档添加元素

PUT /yyf/user/1
{
  "name": "张三",
  "age": 69
}


PUT /yyf/user/2
{
  "name": "李四",
  "age": 80
}


PUT /yyf/user/3
{
  "name": "王五",
  "age": 32
}

获取文档的值

GET /yyf/user/1

更新文档的值

POST /yyf/user/1/_update
{
  "doc": {
    "name": "车厘子",
    "age": 64
  }
}

简单的条件查询 , q=关键字:值

GET /yyf/user/_search?q=name:王五

复杂的操作查询(排序、分页、高亮、模糊查询、精准查询)

GET /yyf/user/_search
{
  "query": {
    "match": {
      "name": "王五"
    }
  }
}

结果过滤:

GET /yyf/user/_search
{
  "query": {
    "match": {
      "name": "王五"
    }
  },
  "_source": ["name"]
}

在这里插入图片描述

排序: desc 降序 , asc : 升序

GET /yyf/user/_search
{
  "query": {
    "match": {
      "name": "王五"
    }
  },
  "_source": ["name"],
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

分页查询

from : 从第几条数据开始 , 默认从零开始
size:返回多少数据(单页面数据)


GET /yyf/user/_search
{
  "query": {
    "match": {
      "name": "王五"
    }
  },
  "_source": ["name"],
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 1
}

在这里插入图片描述

多条件查询

must相当于mysql中的and , 要求必须都匹配
查询name是王五且age是32的值

GET /yyf/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "王五"
          }
        },
        {
          "match": {
            "age": 32
          }
        }
        
      ]
    }
  }
}

should相当于mysql中的or
age是32 或者name是王五的元素


GET /yyf/user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "王五"
          }
        },
        {
          "match": {
            "age": 32
          }
        }
        
      ]
    }
  }
}

must not过滤掉字段中满足条件的数据

不是王五且不等于三十二的
GET /yyf/user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "name": "王五"
          }
        },
        {
          "match": {
            "age": 32
          }
        }
        
      ]
    }
  }
}

过滤查询
查询name是王五 ,且age满足从32到35岁的数据 , 包含32和35
gt : >
gte: >=
lt: <
lte:<=

GET /yyf/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "王五"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 32,
            "lte": 35
          }
        }
      }
    }
  }
}

匹配多个条件

在这里插入图片描述

must类似于and where id = 1 and name = xxx

should 类似于or where id = 1 or name = xxx

must_not 相当于不等于

精确查询

term查询是直接通过倒排索引指定的词条进行精确查找的

  • term是精确查找
  • match , 会使用分词解析(先分析文档 , 然后通过分析的文档进行查询)

两个类型:test keyword
keyword字段类型不会被分词器解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值