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

ElasticSearch


倒排索引

【SpringCloud】微服务技术栈入门5 - ElasticSearch_第1张图片

倒排索引建立:对文章标题进行分词,将每个词存入 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

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

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

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


测试 ik 分词器

打开 kibana 控制台localhost:5601

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

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

【SpringCloud】微服务技术栈入门5 - ElasticSearch_第2张图片

POST _analyze
{
  "text": "我再也不想学JAVA语言了",
  "analyzer": "ik_smart"
}

添加扩展词典

网络热词不可能总是被 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>

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

小黑子
煤油树枝
香精煎鱼
香菜凤仁鸡
梅素汁

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

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

【SpringCloud】微服务技术栈入门5 - ElasticSearch_第3张图片


操作索引

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

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",表示不会进行分词
          }
        }
      }
    }
  }
}

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

{
	"acknowledged": true,
	"shards_acknowledged": true,
	"index": "heima"
}

索引与文档操作

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

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

PUT /heima/_mapping
{
  "properties":{
    "age":{
      "type":"keyword"
    }
  }
}

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


你可能感兴趣的:(#,微服务,spring,cloud,微服务,elasticsearch)