ElasticSearch学习

简介

ES是一个分布式高扩展基于lucense的实时全文搜索引擎,基于RestFul风格的API调用。

ES安装

环境要求: 1.8jdk、NodeJS(ELK需要)

Windows安装

ElasticSearch

注:ES版本7.6.2

  1. 解压即可
    在这里插入图片描述

  2. 目录讲解

# 启动文件
bin
# 配置文件 
config 
  #虚拟机配置  如果是服务器内存小需要修改默认启动内存(注:默认启动内存是1G)
  jvm.options
  #日志配置 
  log4j2.properties
  #es配置文件 9200默认端口
  elasticsearch.yml
# 运行所需环境
jdk
# 依赖
lib
#日志
logs
#功能模块
modules
#插件
plugins
  1. 运行ES
    在这里插入图片描述
  2. 访问
    在这里插入图片描述
Kibana

注:需要和ES版本保持一致

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

  1. 下载相对于ES版本的Kibana(注:需要Node环境)
    在这里插入图片描述

  2. 开放es的跨域请求找到Elasticsearch.yml

http.cors.enabled: true
http.cors.allow-origin: "*"
  1. 启动Kibana

  2. 访问
    在这里插入图片描述

  3. 图形化查找(之后的所有查找都在这里编写)
    在这里插入图片描述

  4. 配置国际化

找到Kibana.yml 添加:i18n.locale: “zh-CN” 然后重启

ES核心概念

ElasticSearch是面向文档的,关系型数据库和ElasticSearch对比

注:es8之后的版本将启用type字段

MysqlElasticSearch
数据库(databases)索引(indexs)
表(table)types
行(rows)documents
字段(columns)fields

物理设计:
ElasticSearch在后台把每个索引划分成多个分片;每个分片可以在集群中的不同服务器迁移
一个人就是一个集群!默认的集群名称就是elasticsearch
倒排索引:
是es快速的原因,他会把每个词做分离然后根据关键词去匹配,关键字命中多的权重就高,排序就高

IK分词器

分词器是将一段中文划分成一个个的关键字,而默认的中文分词会将每个字看成一个词,搜索出来的效果就很不尽如人意。例如:我爱吃番茄炒鸡蛋,IK分词就会分成类似爱、吃、番茄、炒鸡蛋这几个关键词

安装

  1. 找到对应的版本然后下载
  2. 将下载的文件解压到plugins文件下
  3. 然后重启kibana和ES

IK_SMART(最少切分算法)

在这里插入图片描述

IK_MAX_WORD(最细粒度划分)

在这里插入图片描述

总结:这里比较来看ik_max_word分出来的词汇更加的细致

自定义ik词典

这里我们会发现如果输入当下流行的网络热词的话并没办法进行分词,这里我们就可以自定义词典来适应当代的新潮流词汇

  1. 找到ik的config目录创建my.dic
    2.

  2. 打开IKAnalyzer.cfg.xml添加my.dic
    在这里插入图片描述

  3. 重启ES

  4. 访问发现配置已经生效
    在这里插入图片描述

索引基本操作

methodurl地址描述
PUTlocalhost:9200/索引/类型名称/文档id创建文档(指定文档id)
POSTlocalhost:9200/索引/类型名称创建文档(随机id)
POSTlocalhost:9200/索引/类型名称/文档id/_update修改文档
DELETElocalhost:9200/索引/类型名称/文档id删除文档
GETlocalhost:9200/索引/类型名称/文档id根据id查询文档
POSTlocalhost:9200/索引/类型名称/_search查询所有数据

添加一个xiye的索引、goods类型、id为1的商品

PUT /xiye/goods/1
{
  "goodsname":"西红柿",
  "price":"29"
}

指定索引字段和类型

PUT xiye2
{
  "mappings":{
    "properties":{
      "name":{
        "type":"text"
      },
      "age":{
        "type":"long"
      }
      ,
      "birthday":{
        "type":"date"
      }
    }
  }
}

注: 如果没给定类型名es会创建一个_doc的默认类型

修改es数据

POST xiye/goods/1
{
  "name":"超级西红柿"
}

发现name值已经改变
在这里插入图片描述

删除

DELETE xiye/goods/1

:如果只写xiye 就删除所有索引 写索引和类型 就删除全部的类型 具体到id 就删除精确的id值

文档查询操作(重点)

重点理解:

  • match是将搜索的字分词
  • term不将搜索的字进行分词
  • text 类型在存储时已经分词
  • keyword 类型在存储的时候不会分词

添加假数据

PUT xiye/user/1
{
  "name":"张麻子",
  "age": 19,
  "love":["吃饭","交友","唱歌"],
  "tag":["麻匪","好人","聪明"]
}

PUT xiye/user/2
{
  "name":"汤师爷",
  "age":28,
  "love":["敛财","美女","权力"],
  "tag":["伪善","学士","装糊涂"]
}
PUT xiye/user/3
{
  "name":"黄四郎",
  "age":39,
  "love":["钱","敛财","聪明"],
  "tag":["杀人诛心","心机"]
}
PUT xiye/user/4
{
  "name":"张麻子copy",
  "age": 13,
  "love":["吃饭","交友","唱歌"],
  "tag":["麻匪","好人","聪明"]
}

根据name 分词查询

GET xiye/user/_search
{
  
  "query": {
   #match 分词查找
    "match": {
      "name":"张麻子"
    }
   
  }
  #只显示那些字段
  , "_source": ["age","name"]
}

在这里插入图片描述

注: 当出现多条匹配的数据时 _score越高 权重就越高展示的优先级就越高

排序
排序:注意要排序的字段需是long类型

GET xiye/user/_search
{
  "query": {
    "match": {
      "name": "张麻子"
    }
  },
  #根据age字段升序
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ]
}

在这里插入图片描述
分页
类似mysql limit

GET xiye/user/_search
{
  "query": {
    "match": {
      "name": "张麻子"
    }
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ],
  #limit 的start
  "from": 0,
  #limit 显示多少数据
  "size": 20
}

多条件查询
must 类似mysql and
shoult 类似mysql or
must_not 类似mysql !=

GET xiye/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "张麻子"
          }
        },
         {
          "match": {
            "age": "19"
          }
        }
      ]
      
    }
  }
}

在这里插入图片描述
查询结果年龄大于10小于20的数据

GET xiye/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "张麻子"
          }
        }
      ]
      , "filter": [
        {"range": {
          "age": {
            "gte": 10,
            "lte": 20
          }
        }}
      ]
    }
  }
}

单字段匹配多条件查询
多条件按空格分割查询

GET xiye/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "tag": "好人 匪"
          }
        }
      ]
      
    }
  }
}

在这里插入图片描述
精确查询

注:需要精确查找需要满足term+keyword 类型的字段两个条件

#设计表结构
PUT xiye3
{
  "mappings":{
    "properties":{
      "name":{
        "type":"text"
      },
    
      "desc":{
        "type":"keyword"
      }
    }
  }
}
#添加模拟数据
PUT xiye3/_doc/1
{
  "name":"范源鑫",
  "desc":"我是一个粉刷匠"
}
PUT xiye3/_doc/2
{
  "name":"范仲淹",
  "desc":"我是一个粉刷匠123"
}

#精确查询
GET xiye3/_search
{
  "query": {
    "term": {
      "desc": {
        "value": "我是一个粉刷匠"
      }
    }
  }
}

在这里插入图片描述
高亮查询

GET xiye3/_search
{
  "query": {
    "match": {
      "name": "范源鑫"
    }
  
  },
  "highlight": {
    #定义标签前缀 可自定义
    "pre_tags": "<h2>",
    #定义标签后缀 可自定义
    "post_tags": "</h2>",
    # 高亮的字段 
    "fields": {
      "name": {}
    }
  }
}

SpringBoot集成ES

参考网络其它文章

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!关于学习Elasticsearch,我可以给你一些指导。Elasticsearch是一个开源的分布式搜索和分析引擎,主要用于快速、实时地存储、搜索和分析大量数据。下面是一些学习Elasticsearch的步骤: 1. 了解基本概念:开始学习Elasticsearch之前,你需要了解一些基本的概念,比如索引(index)、类型(type)、文档(document)、字段(field)等。这将帮助你更好地理解Elasticsearch的工作原理。 2. 安装和配置:根据你的操作系统,你可以从Elasticsearch官方网站下载并安装合适的版本。安装完成后,你需要进行适当的配置,如设置集群名称、分配内存等。 3. 学习REST API:Elasticsearch提供了丰富的REST API,用于与其进行交互。了解如何使用这些API来索引、搜索和删除数据是学习Elasticsearch的重要一步。 4. 索引和搜索数据:学习如何创建索引、添加文档以及执行搜索操作是使用Elasticsearch的关键。掌握查询语法、过滤器、聚合操作等功能可以帮助你更有效地使用Elasticsearch。 5. 数据建模和分析:学习如何设计合适的数据模型和映射,以及如何使用Elasticsearch进行数据分析和可视化是提高你的技能的重要一步。 6. 扩展和优化:学习如何在生产环境中扩展和优化Elasticsearch集群是非常重要的。了解如何分片、复制、调优性能等将帮助你更好地管理和维护你的数据。 7. 学习资源:除了官方文档,还有很多优秀的学习资源可供参考,如书籍、教程和在线课程等。利用这些资源可以更系统地学习和掌握Elasticsearch。 希望这些步骤能对你学习Elasticsearch有所帮助!如果有任何问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值