ELASTICSEARCH的mapping设置


目录

ELASTICSEARCH的mapping设置

一.mapping映射结构

1.1动态映射

2.静态手动映射

3.对比数据库

4.对象与json的转化

1.一个普通类的对象

2.稍微复杂一些的对象

3.之前JSON数据转换为Java对象

二.ik分词器插件引入到ELASTICSEARCH

1.文件拷贝

2.安装依赖(已有不要安装)

3.解压

4.删除安装包

5.进入到Config文件夹

6.将elasticsearch的文件夹名称修改成analysis-ik

7.重新启动es加载plugins中的ik分词器

8.访问es提供的接口,实现不同的分词器使用

9.配置扩展和停用词典

1.plugins目录下的ik分词器中config文件夹中找到IKAnalyzer.cfg.xml

2.没找到,去上传一份

3.找错文件夹 上一步可以不用做

4.配置扩展和停用

5.生成对应的词典们

6.输出结果

10.通过mapping设置将ik_max_word作为字符串类型的分词器使用

1.index05中,定义article

2.新建一个index05

3.在index05中添加一个article类型的自定义mapping结构

4.index05的article类型中新增几个document

5.验证是否使用了ik分词器将title中java编程思想分词计算为{java}{编程}{思想}


​​​​​​​

一.mapping映射结构

1.1动态映射

在新增任何数据之前的空索引中,动态mapping没有配置,空的内容

1.添加一个新的index03

2.查询mapping 状态

  • curl -XGET http://10.42.60.249:9200/index03/_mapping

返回结果

{"index03":{"mappings":{}}}

  • 一旦添加任何数据到索引中,mapping结构会根据你的数据类型

  1. {
  2. "index03": {
  3. "mappings": {
  4. "article": { //对article类型定义的映射配置
  5. "properties": { //mapping中的具体属性
  6. "content": { //content域的设置
  7. "type": "text", //字符串类型,并且根据text定义分词计算
  8. "fields": { //对一个域的属性做扩展
  9. "keyword": { //查询可用域
  10. "type": "keyword", //keyword类型相当于lucene底层使用的StringField类型, 整体也可以作为一词项使用
  11. "ignore_above": 256//作为整体使用时,字符串超过256字节,keyword类型就不生效了
  12. }
  13. }
  14. },
  15. "id": {
  16. "type": "text",
  17. "fields": {
  18. "keyword": {
  19. "type": "keyword",
  20. "ignore_above": 256
  21. }
  22. }
  23. },
  24. "title": {
  25. "type": "text",
  26. "fields": {
  27. "keyword": {
  28. "type": "keyword",
  29. "ignore_above": 256
  30. }
  31. }
  32. }
  33. }
  34. }
  35. }
  36. }
  37. }
  • 在index03中添加一个新的域,给定一个值不是字符串是整数"product_id":1
  1. {
  2. "index03": {
  3. "mappings": {
  4. "article": {
  5. "properties": {
  6. "content": {
  7. "type": "text",
  8. "fields": {
  9. "keyword": {
  10. "type": "keyword",
  11. "ignore_above": 256
  12. }
  13. }
  14. },
  15. "id": {
  16. "type": "text",
  17. "fields": {
  18. "keyword": {
  19. "type": "keyword",
  20. "ignore_above": 256
  21. }
  22. }
  23. },
  24. "product_id": {
  25. "type": "long"
  26. },
  27. "title": {
  28. "type": "text",
  29. "fields": {
  30. "keyword": {
  31. "type": "keyword",
  32. "ignore_above": 256
  33. }
  34. }
  35. }
  36. }
  37. }
  38. }
  39. }
  40. }

对于某个索引,中某个类型中的某个域属性,一旦动态映射完成,无法修改;添加数据之前提前将mapping做好

2.静态手动映射

新增一个index04,新增数据之前,将其对应artilce类型中的content只定义为text,id定义为"integer"/"int",title定义为"text",imgUrl定义为"keyword"

  • #curl -XPUT http://10.9.151.60:9200/index04

新建完自定义的mapping重新获取index04的内容

  1. {
  2. "index04": {
  3. "mappings": {
  4. "book": {
  5. "properties": {
  6. "content": {
  7. "type": "text"
  8. },
  9. "id": {
  10. "type": "integer"
  11. },
  12. "imgUrl": {
  13. "type": "keyword"
  14. },
  15. "title": {
  16. "type": "text"
  17. }
  18. }
  19. }
  20. }
  21. }
  22. }

3.对比数据库

mapping结构设置,与数据库中定义一个表格的结构(scheming),是一样的意义

4.对象与json的转化

对象和json的对应关系:

1.一个普通类的对象

class User {private String id;private Integer age;}

user对象对应json字符串

{"id":"uuid1","age":18}

{
    "id": "uuid1",
    "age": 18
}

2.稍微复杂一些的对象

class Order{private String order_id;private OrderShipping shipping;private List<OrderItem> orderItems;}class OrderShipping{private  String receiver;private String address;}

order对象对应的json

{"order_id":"uuid","shipping":{"receiver":"张三","address":"beijing"}}

{

    "order_id": "uuid",

    "shipping": {

        "receiver": "张三",

        "address": "北京"

    },

     "orderItems":[{"":"","":""},{"":"","":""},{"":"","":""}]

}

3.之前JSON数据转换为Java对象

{"index04": {"mappings": {"book": {"properties": {"content": {"type": "text"},"id": {"type": "integer"},"imgUrl": {"type": "keyword"},"title": {"type": "text"}}}}}
}

转换Java对象

第一层

class Object1{private  Object2  index04;}
  • {"index04":{Object2的json}}

第二层

     class Object2{private  Object3   mappings;}
  • {"mappings":{object3的json}}

第三层

     class Object3{private  Object4  book;}
  • {"book":{object4的json}}

第四层

     class Object4 {private Object5 properties;}
  • {"properties":{object5的json}}

第五层

     class Object5{private   Object6   content;private  Object6   title;lprivate  Object6 id;private  Object6  imgUrl;}
  • {"content":{object6的json},"title":{object6的json},"id":{object6的json},"imgUrl":{object6的json}}

第六层

     class Object6{private String type;}
  • {"type":"text/integer"}

二.ik分词器插件引入到ELASTICSEARCH

1.文件拷贝

2.安装依赖(已有不要安装)

3.解压

4.删除安装包

将安装包一定要删除,es的启动会加载plugins文件夹下内容,一旦发现不认识的zip包,启动报错

5.进入到Config文件夹

6.将elasticsearch的文件夹名称修改成analysis-ik

7.重新启动es加载plugins中的ik分词器

我的之前报错,内存不足,直接关闭云主机,不惯毛病,

具体错误,可以CSDN 不过好多博客写全是废话,屁都不着边,看也白看

8.访问es提供的接口,实现不同的分词器使用

http://10.42.60.249:9200/index01/_analyze?analyzer=ik_max_word&text=中华人民共和国

  • index01:一个存在的索引
  • _analyze:对分词的测试

参数:analyzer=ik_max_word,就是ik分词器的名称

 text=中华人民共和国,计算分词的测试字符串

9.配置扩展和停用词典

1.plugins目录下的ik分词器中config文件夹中找到IKAnalyzer.cfg.xml​​​​​​​

2.没找到,去上传一份

3.找错文件夹 上一步可以不用做

4.配置扩展和停用

5.生成对应的词典们

  • ext.dic:华人民

  • stopword.dic:人民

6.输出结果

{"tokens": [{"token": "中华人民共和国","start_offset": 0,"end_offset": 7,"type": "CN_WORD","position": 0}, {"token": "中华人民","start_offset": 0,"end_offset": 4,"type": "CN_WORD","position": 1}, {"token": "中华","start_offset": 0,"end_offset": 2,"type": "CN_WORD","position": 2}, {"token": "华人民","start_offset": 1,"end_offset": 4,"type": "CN_WORD","position": 3}, {"token": "华人","start_offset": 1,"end_offset": 3,"type": "CN_WORD","position": 4}, {"token": "人民共和国","start_offset": 2,"end_offset": 7,"type": "CN_WORD","position": 5}, {"token": "共和国","start_offset": 4,"end_offset": 7,"type": "CN_WORD","position": 6}, {"token": "共和","start_offset": 4,"end_offset": 6,"type": "CN_WORD","position": 7}, {"token": "国","start_offset": 6,"end_offset": 7,"type": "CN_CHAR","position": 8}]
}

10.通过mapping设置将ik_max_word作为字符串类型的分词器使用

1.index05中,定义article

  • {
  • "properties": {
  • "content": {
  • "type": "text",
  • "analyzer":"ik_max_word"
  • },
  • "title": {
  • "type": "text",
  • "analyzer":"ik_max_word"
  • },
  • "id": {
  • "type": "integer"
  • },
  • "imgUrl": {
  • "type": "keyword"
  • }
  • }
  • }

2.新建一个index05

3.在index05中添加一个article类型的自定义mapping结构

curl -XPUT http://10.42.60.249:9200/index05/_mapping/article -d '{"properties":{"content":{"type":"text","analyzer":"ik_max_word"},"title":{"type":"text","analyzer":"ik_max_word"},"id":{"type":"integer"},"imgUrl":{"type":"keyword"}}}'

4.index05的article类型中新增几个document

curl -XPUT -d '{"id":1,"title":"java编程思想","content":"中华人民共和国"}' http://10.42.60.249:9200/index05/article/1

5.验证是否使用了ik分词器将title中java编程思想分词计算为{java}{编程}{思想}

curl -XGET http://10.42.60.249:9200/index05/_search -d '{"query":{"term":{"title":"编程"}}}'

IK分词器安装成功

Elasticsearch个人心得笔记(四)相关推荐

  1. java分布式免费开源搜索引擎 Elasticsearch 详细学习笔记

    网页右边,向下滑有目录索引,可以根据标题跳转到你想看的内容 如果右边没有就找找左边 此文是学习尚硅谷Elasticsearch课程的笔记 Elasticsearch 全文检索引擎 Lucene 是 A ...

  2. 美术网络计算机培训总结,【推荐】网络培训心得体会四篇

    [推荐]网络培训心得体会四篇 心中有不少心得体会时,不妨将其写成一篇心得体会,让自己铭记于心,如此就可以提升我们写作能力了.怎样写好心得体会呢?以下是小编为大家收集的网络培训心得体会4篇,希望对大家有 ...

  3. ElasticSearch搜索引擎API笔记

      ElasticSearch搜索引擎API笔记 1. pom.xml <dependency> <groupId>org.elasticsearch.client</g ...

  4. 2019苏州人工智能产业年会心得笔记

    2019苏州人工智能产业年会心得笔记 目录 2019苏州人工智能产业年会心得笔记 核心总结: 第一天--暖场视频 第一天--上午两场主题演讲 从智能系统或智能体含义处理的角度看认知计算 海上目标智能信 ...

  5. MySQL高级学习笔记(四)

    文章目录 MySQL高级学习笔记(四) 1. MySql中常用工具 1.1 mysql 1.1.1 连接选项 1.1.2 执行选项 1.2 mysqladmin 1.3 mysqlbinlog 1.4 ...

  6. 【ElasticSearch】学习笔记(三)es的高级操作

    [ElasticSearch]学习笔记(三)es的高级操作 文章目录 [ElasticSearch]学习笔记(三)es的高级操作 1. 数据聚合 1.1 聚合总类 1.2 DSL实现聚合 1.2.1 ...

  7. 数学建模日常心得笔记

    本文章是个人学习数学建模的日常心得笔记 学习资料: B站视频: [零基础教程]老哥:数学建模算法.编程.写作和获奖指南全流程培训!_哔哩哔哩_bilibili 参考书籍:<MATLAB R201 ...

  8. C++ Primer第三章 心得笔记

    之前的一章我本末倒置了,我看了一个大佬的此书笔记整理得很详细 很得体.我也想按照他的这种方法 在我学习和敲代码的时候进行记录,但是我发现为了记笔记而记笔记 这种方法使我很累.违背了记录分享交流的初衷. ...

  9. 数据结构与算法心得笔记——零起点学习(一)

    从今天开始,我会跟大家分享一下本人学习数据结构和算法的心得体会,也算是今后的复习笔记,如有说错的地方还望各位大佬批评指正,我定虚心请教.同时也希望刚刚接触数据结构和算法的小白们能养成记笔记的习惯,等你 ...

  10. JAVA基础学习精简心得笔记整理

    JAVA基础学习精简心得笔记整理 配置java环境变量 Java的运行过程  基本数据类型 引用数据类型 逻辑运算符 数组 方法重载 封装 继承 多态 多态的作用 单例设计模式 接口interface ...

最新文章

  1. easyui左侧导航菜单右侧载入百度地图项目框架
  2. 个推透传消息设置通知栏展示 ios_手机通知栏消息太多,这招教你关闭弹出消息,立刻清爽...
  3. todo已完成任务_重要主干街路已完成清雪任务
  4. matlab张量工具初步
  5. 融云聊天 php_thinkphp整合系列之融云即时通讯在线聊天
  6. Java 随心笔记7
  7. 单例模式 c# 1214
  8. 自然语言处理项目之新闻主题分类Python实现
  9. SWIFT显示底部的工具条
  10. 运行100万秒无错误!
  11. Linq的内部执行原理浅析
  12. 基于OpenCV的银行卡号识别系统实现(一)----- 银行卡号识别步骤
  13. PLC(S7-200)通过自由通讯口方式与变频器通讯(VLT)
  14. 测试网卡芯片型号的软件,查看电脑无线网卡型号_查看无线网卡芯片型号
  15. 基于社交网络分析算法(SNA)的反欺诈(二)
  16. 【多轮对话】多轮对话状态追踪技术综述
  17. oracle表空间权限赋予,Oracle 创建用户、表空间以及授予权限
  18. 致电电信索要公网ip地址,如何判断自己属于公网ip地址
  19. MuMu模拟器进行adb操作
  20. c语言比matlab慢很多,为什么我的Python脚本与Matlab相比速度太慢?

热门文章

  1. 【佐佑众工】每天早上起床, 我都要看一下福布斯排行榜
  2. matlab中mux和bus的区别
  3. 人类首张黑洞照片发布,像甜圈圈,顺便恭喜爱因斯坦...
  4. java获取微信小程序用户信息
  5. 乐高Studio打开Solidworks零件/装配体 (sw另存obj文件)
  6. 呼市中专计算机高考试题,呼和浩特市人教版物理高二选修2-1 6.3电子计算机同步练习...
  7. mysql sum total,从MySQL数据库获取Java中的Sum(total)
  8. DeFi 玩家收益农耕的五种形式
  9. Oracle-----综合练习:基础查询
  10. ES-elasticsearch