• 【SpringCloud】微服务技术栈入门5 - ElasticSearch


    ElasticSearch


    倒排索引

    在这里插入图片描述

    倒排索引建立:对文章标题进行分词,将每个词存入 term,这些词也对应一个 id 也就是文档

    倒排索引检索:假设我们搜索华为手机

    1. 分词:“华为”“手机”
    2. 从数据库中找到对应的两个 key,及其文档 id
    3. 由于文档 id 分别是 2,3 以及 1,2;可见文档 id=2 重合度最高,最符合搜索条件,则搜索结果他会排在最前面
    4. 搜索结果存入结果集

    环境配置

    首先你需要下载下面三个东西(这边选择 7.8 版本是为了兼容低版本 JAVA,高版本的 ES 必须要高版本 JDK,十分不方便)

    1. ElasticSearch7.8.0
    2. kibana
    3. ik 分词器

    注意!由于我们是在 windows 下搭建的环境,所以下载 ik 分词器时务必下载 elasticsearch-analysis-ik-7.8.0.zip 这个编译好的包,别下载源码包了!!!

    三件套全部版本都必须一致!不存在什么向下或者向上兼容!


    windows 下安装非常简单,把三个压缩包全部解压到一个非中文路径的目录下

    先把 ik 分词器 压缩包的所有内容丢到 es7.8 根目录下的 plugins 文件夹

    打开 es7.8 的 JVM 配置文件:es7.8/config/jvm.options
    调节一下运行内存,否则一运行必定爆内存然后闪退

    -Xms1g
    -Xmx1g
    
    • 1
    • 2

    大功告成,双击运行下面这两个 bat 文件即可(注意先后顺序)

    1. es根目录/bin/elasticsearch.bat
    2. kibana根目录/bin/kibana.bat

    es 默认运行 9200 端口,kibana 默认运行 5601 端口


    测试 ik 分词器

    打开 kibana 控制台localhost:5601

    点击左上角菜单,拉到最下面选择 dev tools
    在这里可以随意测试我们的 es 代码,比如说插入索引和查询啥的

    按照下图格式,我们使用 ik 智能分词器对一行包含汉语和英语的文字执行了分词操作

    在这里插入图片描述

    POST _analyze
    {
      "text": "我再也不想学JAVA语言了",
      "analyzer": "ik_smart"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    添加扩展词典

    网络热词不可能总是被 ik 分词器所收录,更何况是中文,所以特殊情况下我们需要添加扩展字典来帮助 ik 分词器正确识别网络新词

    首先打开 ik 分词器扩展设置文件:es根目录/plugins/analysis-ik/config/IKAnalyzer.cfg.xml
    把他改成下面的样子

    
    DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
    	<comment>IK Analyzer 扩展配置comment>
    	
    	<entry key="ext_dict">ext.dicentry>
    	 
    	<entry key="ext_stopwords">stopword.dicentry>
    
    	
    	
    	
    	
    properties>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    同目录下新建文件 ext.dic 用于存放扩展词,扩展词每写一个换一次行
    我们可以添加以下两个扩展词

    小黑子
    煤油树枝
    香精煎鱼
    香菜凤仁鸡
    梅素汁
    
    • 1
    • 2
    • 3
    • 4
    • 5

    重启 es7.8,然后再次回到我们的 kibana 界面

    可见,ik 分词器成功的识别出了网络热词并执行分词操作!

    在这里插入图片描述


    操作索引

    创建一个简单的索引只需要按照以下的代码进行简要修改即可

    PUT /heima
    {
      "mappings": {
        "properties": {
          "info":{                            // 设置字段名为"info"的映射
            "type": "text",                   // 设置字段类型为"text"
            "analyzer": "ik_smart"            // 使用中文分词器"ik_smart"进行分词
          },
          "email":{                           // 设置字段名为"email"的映射
            "type": "keyword",                 // 设置字段类型为"keyword",表示不会进行分词
            "index": false                     // 设置不对该字段进行索引,即无法通过该字段进行搜索
          },
          "name":{                            // 设置字段名为"name"的映射
            "type": "object",                  // 设置字段类型为"object",表示是一个嵌套对象
            "properties": {                    // 定义嵌套对象的属性
              "firstname":{                    // 设置嵌套对象的属性名为"firstname"的映射
                "type":"keyword"                // 设置属性类型为"keyword",表示不会进行分词
              },
              "lastname":{                     // 设置嵌套对象的属性名为"lastname"的映射
                "type":"keyword"                // 设置属性类型为"keyword",表示不会进行分词
              }
            }
          }
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在 dev tools 中执行完毕后的结果是

    {
    	"acknowledged": true,
    	"shards_acknowledged": true,
    	"index": "heima"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    索引与文档操作

    es 中索引库和 mapping 一旦创建后就无法修改,但是可以向其中添加新的字段

    如下指令,向索引 heima 添加了一个新的字段叫做 age

    PUT /heima/_mapping
    {
      "properties":{
        "age":{
          "type":"keyword"
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    获取索引库:GET /索引库名称
    删除索引库:DELETE /索引库名称


  • 相关阅读:
    Java 不同接口中含有相同签名方法
    分享一个逻辑题_一眼望去无法下手
    Apache ECharts简介和相关操作
    tomcat的安全配置:
    李宏毅《机器学习》丨7. Conclusion(总结)
    iOS CoreMotion获取传感器数据
    java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码
    CentOS7源码安装 lldpd 并附查询脚本
    嵌入式软件架构设计-函数调用
    Unity技术手册-编辑器基础入门万字大总结
  • 原文地址:https://blog.csdn.net/delete_you/article/details/133611783