Elasticsearch个人心得笔记(四) r囧r小猫 2022-01-21 06:15 385阅读 0赞 # ** 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** ![20190608162046313.png][] **2.查询mapping 状态** * **curl -XGET [http://10.42.60.249:9200/index03/\_mapping][http_10.42.60.249_9200_index03_mapping]** ![20190608162200797.png][] **返回结果** **\{"index03":\{"mappings":\{\}\}\}** * **一旦添加任何数据到索引中,mapping结构会根据你的数据类型** ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70][] 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. \} 38. * 在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][http_10.9.151.60_9200_index04]** ![20190608164628930.png][] **新建完自定义的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;l private 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.文件拷贝 ## ![20190608170358477.png][] ## 2.安装依赖(已有不要安装) ## ![20190608170444514.png][] ## 3.解压 ## ![20190608170539820.png][] ## 4.删除安装包 ## ![20190608170650711.png][] **将安装包一定要删除,es的启动会加载plugins文件夹下内容,一旦发现不认识的zip包,启动报错** ## 5.进入到Config文件夹 ## ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 1][] ## **6.**将elasticsearch的文件夹名称修改成analysis-ik ## ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 2][] ## 7.重新启动es加载plugins中的ik分词器 ## ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 3][] **我的之前报错,内存不足,直接关闭云主机,不惯毛病,** **具体错误,可以CSDN 不过好多博客写全是废话,屁都不着边,看也白看** ## 8.访问es提供的接口,实现不同的分词器使用 ## **[http://10.42.60.249:9200/index01/\_analyze?analyzer=ik\_max\_word&text=中华人民共和国][http_10.42.60.249_9200_index01_analyze_analyzer_ik_max_word_text]** ![20190608174304467.png][] * index01:一个存在的索引 * \_analyze:对分词的测试 **参数:analyzer=ik\_max\_word,就是ik分词器的名称** ** text=中华人民共和国,计算分词的测试字符串** ## 9.配置扩展和停用词典 ## ### **1.plugins目录下的ik分词器中config文件夹中找到IKAnalyzer.cfg.xml** ### ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 4][] ### 2.没找到,去上传一份 ### ![20190608175406698.png][] ### 3.找错文件夹 上一步可以不用做 ### ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 5][] ### 4.配置扩展和停用 ### ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 6][] ### 5.生成对应的词典们 ### * ext.dic:华人民 ![20190608175733178.png][] ![20190608175719189.png][] * stopword.dic:人民 ![20190608175837370.png][] ### 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 ### ![20190608180418143.png][] ### 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"\}\}\}'** ![20190608180632210.png][] ### 4.index05的article类型中新增几个document ### **curl -XPUT -d '\{"id":1,"title":"java编程思想","content":"中华人民共和国"\}' http://10.42.60.249:9200/index05/article/1** ![20190608180839507.png][] ### 5.验证是否使用了ik分词器将title中java编程思想分词计算为\{java\}\{编程\}\{思想\} ### **curl -XGET [http://10.42.60.249:9200/index05/\_search][http_10.42.60.249_9200_index05_search] \-d '\{"query":\{"term":\{"title":"编程"\}\}\}'** ![20190608181012119.png][] **IK分词器安装成功** [20190608162046313.png]: /images/20220121/2a8c4d3befb1419c81d32fce03329d57.png [http_10.42.60.249_9200_index03_mapping]: http://10.9.151.60:9200/index03/_mapping [20190608162200797.png]: /images/20220121/2883fa5cd941423296800926cf9ac549.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70]: /images/20220121/0b010ef8db714efeb9c019b0abf9c514.png [http_10.9.151.60_9200_index04]: http://10.9.151.60:9200/index04 [20190608164628930.png]: /images/20220121/89536a89fcf742e88749cb7bed927bbf.png [20190608170358477.png]: /images/20220121/0cc0365695354a6d9988509e260fa926.png [20190608170444514.png]: /images/20220121/04967042baa04b3ca13bb532c7314356.png [20190608170539820.png]: /images/20220121/ddbf8225352d4cbab40e6d8215783ccb.png [20190608170650711.png]: /images/20220121/e314e422839b4c4ca45a349aff444f47.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 1]: /images/20220121/ecc8c1f22ebc4a9b9ae797b5f32fd10c.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 2]: /images/20220121/d7aa9b1266af48e98502a04441788f90.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 3]: /images/20220121/307080f3212d45b191dce119a13e4fae.png [http_10.42.60.249_9200_index01_analyze_analyzer_ik_max_word_text]: http://10.9.100.26:9200/index01/_analyze?analyzer=ik_max_word&text=%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD [20190608174304467.png]: /images/20220121/375181d6e90f4d74b738f606ab3dfc64.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 4]: /images/20220121/dfd3ceae5f9342c18b5236ae49ef998c.png [20190608175406698.png]: /images/20220121/306b9446ff3a49dbb4c442adad9243e9.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 5]: /images/20220121/92205d83bcf140c38fa1e3f684ae15f6.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xpdVk1MjE_size_16_color_FFFFFF_t_70 6]: /images/20220121/003d2879db3245e3904f16889fa854bc.png [20190608175733178.png]: /images/20220121/68d6b9d913f742c09065c80e31fd1835.png [20190608175719189.png]: /images/20220121/76d0f134f1ff47138d95aa5027a71dbe.png [20190608175837370.png]: /images/20220121/acae231b3a96431b934cd9e8468a1c4a.png [20190608180418143.png]: /images/20220121/3b4b359210414823aa0f109919c09bfe.png [20190608180632210.png]: /images/20220121/cb0facae61e142f5a29798464c687378.png [20190608180839507.png]: /images/20220121/8c92f42831f94f3083e96e2e2de71635.png [http_10.42.60.249_9200_index05_search]: http://10.9.151.60:9200/index05/_search [20190608181012119.png]: /images/20220121/b5e3cd8649e44096a8c46d68477e715f.png
相关 Nginx个人心得笔记 一.Nginx简介 目录 一.Nginx简介 1.nginx能干什么 2.nginx特点 二.Nginx能做什么有什么优势 二.项目部署 解压就可以用 妖狐艹你老母/ 2022年01月23日 07:49/ 0 赞/ 282 阅读
相关 Elasticsearch个人心得笔记(五) Elasticsearch集群 -------------------- 目录 港控/mmm°/ 2022年01月21日 08:13/ 0 赞/ 294 阅读
相关 Elasticsearch个人心得笔记(四) ELASTICSEARCH的mapping设置 -------------------- 目录 r囧r小猫/ 2022年01月21日 06:15/ 0 赞/ 386 阅读
相关 Elasticsearch个人心得笔记(三) Elasticsearch个人心得笔记(三) -------------------- 目录 爱被打了一巴掌/ 2022年01月21日 06:01/ 0 赞/ 290 阅读
相关 Elasticsearch个人心得笔记(二) Elasticsearch命令大全 -------------------- 目录 ﹏ヽ暗。殇╰゛Y/ 2022年01月21日 05:41/ 0 赞/ 434 阅读
相关 Flume个人心得笔记 一、概述 1. Flume是Apache提供的开源的、分布式的、可靠的日志收集系统 2. 能够有效的收集、聚合、传输大量的日志数据 3. Flume有2个版本:Fl 布满荆棘的人生/ 2021年12月16日 12:25/ 0 赞/ 408 阅读
还没有评论,来说两句吧...