JavaWeb_SpringCloud微服务_Day5-elasticsearch

JavaWeb_SpringCloud微服务_Day5-elasticsearch

  • 初识elasticsearch
    • elasticsearch
    • 倒排索引
    • elasticsearch的基本概念
    • 安装软件
    • ik分词器的拓展和停用词典
  • 索引库操作
    • mapping属性
    • 创建索引库
    • 查询, 删除, 修改索引库
  • 文档操作
  • RestAPI
  • 来源

初识elasticsearch

elasticsearch

  • elasticsearch: 一个开源的分布式搜索引擎, 可以用来实现搜索, 日志统计, 分析, 系统监控等功能
  • elastic stack(ELK): 以elasticsearch为核心的技术栈, 包括beats, Logstash, kibana, elasticsearch
  • Lucene: Apache的开源搜索引擎类库, 提供了搜索引擎的核心API

倒排索引

  • 文档和词条
    • 一条数据就是一个文档
    • 对文档中的内容分词, 得到的词语就是词条
  • 正向索引
    • 基于文档id创建索引. 查询词条时必须先找到文档, 而后判断是否包含词条
  • 倒排索引
    • 对文档内容分词,对词条创建索引,并记录词条所在文档的信息。查询时先根据词条查询到文档id,而后获取到文档

elasticsearch的基本概念

  • 文档: 一条数据就是一个文档,es中是Json格式
  • 字段: Json文档中的字段
  • 索引: 同类型文档的集合
  • 映射: 索引中文档的约束,比如字段名称、类型
  • elasticsearch与数据库的关系:
    • 数据库负责事务类型操作
    • elasticsearch负责海量数据的搜索、分析、计算

安装软件

  • 创建网络
    要让es和kibana容器互联
    docker network create es-net
    
  • 部署单点es
    docker run -d \
      --name es \
        -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
        -e "discovery.type=single-node" \
        -v es-data:/usr/share/elasticsearch/data \
        -v es-plugins:/usr/share/elasticsearch/plugins \
        --privileged \
        --network es-net \
        -p 9200:9200 \
        -p 9300:9300 \
    elasticsearch:7.12.1
    
    • --privileged:授予逻辑卷访问权
    • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小
    • 测试: http://192.168.174.133:9200
  • 部署kibana
    docker run -d \
    --name kibana \
    -e ELASTICSEARCH_HOSTS=http://es:9200 \
    --network=es-net \
    -p 5601:5601  \
    kibana:7.12.1
    
  • 安装IK分词器
    • 在线安装(较慢), 不推荐
      # 在线安装ik插件(较慢)
      # 进入容器内部
      docker exec -it elasticsearch /bin/bash
      
      # 在线下载并安装
      ./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
      
      #退出
      exit
      #重启容器
      docker restart elasticsearch
      
    • 离线安装
      # 查看挂载的位置
      docker volume inspect es-plugins
      # 然后将下载好的插件拖进去就好了
      
    • 测试
      GET /_analyze
      {
        "analyzer": "ik_smart",
        "text": "黑马程序员学习java太棒了"
      }
      

ik分词器的拓展和停用词典

  • 分词器的作用
    • 创建倒排索引时对文档分词
    • 用户搜索时, 对输入的内容分词
  • ik分词器的模式
    • ik_smart: 智能切分, 粗粒度
    • ik_max_word: 最细切分, 细粒度
  • 拓展和停用词条
    • 利用config目录的ikAnalyzer.cfg.xml文件添加拓展词典和停用词典
    • 在词典中添加拓展词条或者停用词条

索引库操作

mapping属性

  • mapping常见属性
    • type: 数据类型
    • index: 是否索引, 默认true
    • analyzer: 分词器
    • properties: 子字段
  • 常见type
    • 字符串: text, keyword
    • 数字: long, integer, short, byte, double, float
    • 布尔: boolean
    • 日期: date
    • 对象: object

创建索引库

PUT /heima
{
  "mappings": {
    "properties": {
      "info": {
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email": {
        "type": "keyword",
        "index": false
      },
      "name": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "keyword"
          },
          "lastName": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

查询, 删除, 修改索引库


GET /heima

// 添加字段, 不能修改字段
PUT /heima/_mapping
{
  "properties":{
    "age": {
      "type": "integer"
    }
  }
}

DELETE /heima

文档操作

# 查询文档
GET /heima/_doc/1
# 删除文档
DELETE /heima/_doc/1
# 修改文档
## 全量修改, 先删除旧文档, 再增加新文档
PUT /heima/_doc/1
{
  "info": "黑马程序员java讲师",
  "email": "[email protected]",
  "name": {
    "firstName": "云",
    "lastName": "赵"
  }
}
## 增量修改, 修改指定字段值
POST /heima/_doc/1
{
  "email": "[email protected]"
}

RestAPI

RestHighLevelClient已弃置, 不看了

来源

黑马程序员. SpringCloud微服务

你可能感兴趣的:(JavaWeb开发,#,spring,cloud,微服务,elasticsearch,后端,spring,boot,kibana,ik分词器)