当前位置:   article > 正文

Elasticsearch映射类型

elasticsearch映射类型

字段类型必须映射到 Elasticsearch 的基本类型之一,并且需要添加有关如何索引字段的选项。

1、Elasticsearch 映射类型

字段类型Elasticsearch 类型说明
string,varcharkeyword这是不可标记的文本字段,例如 CODE001
string,varchar,texttext这是要标记化的文本字段,例如 a nice text
integerinteger这是一个整型(32位),例如 1、2、3
longlong这是一个长整型(64位)
floatfloat这是一个浮点数(32位),例如 1.2 或 4.5
doubledouble这是一个 double 类型浮点数(64位)
booleanboolean这是一个布尔值:true 或 false
date / datetime

date

这是一个日期时间值
bytes / binarybinary这包含一些用于二进制数据的字节,例如文本或字节流

其他Elasticsearch映射类型: 

2、keyword 与 text 的区别

keyword 类型

keyword 类型:存储数据时候,不会分词建立索引,支持模糊、支持精确匹配;支持聚合、排序操作。

keyword 类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置 ignore_above 指定自持字符长度,超过给定长度后的数据将不被索引,无法通过 term 精确匹配检索返回结果。

使用场景: 存储邮箱号码、url、name、title,手机号码、主机名、状态码、邮政编码、标签、年龄、性别等数据。 用于筛选数据(例如: select * from x where status='open')、排序、聚合(统计))。 直接将完整的文本保存到倒排索引中。

text 类型

text 类型:存储数据时候,会自动分词,并生成索引,支持全文检索、支持模糊、精确查询;不支持聚合和排序操作。

text 类型的最大支持的字符长度无限制,适合大字段存储。

使用场景: 存储全文搜索数据,例如:邮箱内容、地址、代码块、博客文章内容等。

默认结合 standard analyzer(标准解析器)对文本进行分词、倒排索引。 默认结合标准分析器进行词命中、词频相关度打分。

所以创建索引时,当字段需要进行排序、分组、聚合等操作时,需要使用 keyword 类型。

3、综合实例

【实例】在 Elasticsearch 中创建订单索引。

首先定义一个订单信息(order_info)的数据表结构:

名称类型说明
order_idlong订单ID
order_notext订单编号
product_namekeyword商品名称
product_quantityinteger商品数量
pricedouble商品价格
sentboolean订单发送状态
order_datedate(time)订单日期
order_remarktext订单备注

(1)使用 Elasticsearch 指令创建索引

  1. PUT /order_info
  2. {
  3. "settings": {
  4. "index": {
  5. "number_of_shards": "2",
  6. "number_of_replicas": "1"
  7. }
  8. },
  9. "mappings": {
  10. "properties": {
  11. "order_id": {"type": "long"},
  12. "order_no": {"type": "text"},
  13. "product_name": {"type": "keyword"},
  14. "product_quantity": {"type": "integer"},
  15. "price": {"type": "double"},
  16. "sent": {"type": "boolean"},
  17. "order_date": {"type": "date"},
  18. "order_remark": {
  19. "type": "text",
  20. "analyzer": "ik_max_word"
  21. }
  22. }
  23. }
  24. }

参数说明:

number_of_shards:该参数控制组成索引的分片(Shard)的数量。

number_of_replicas:该参数可控制复制副本(Replica)的数量,也就是说,为了实现高可用性,在集群中复制数据的次数。比较好的做法是设置该值至少为1。

执行结果:

(2)使用 Java API 创建索引

  1. /**
  2. * 创建索引
  3. * @param indexName 索引名称
  4. * @author pan_junbiao
  5. */
  6. @Override
  7. public boolean createIndex(String indexName)
  8. {
  9. boolean result = false;
  10. try
  11. {
  12. //1.创建索引的请求
  13. CreateIndexRequest request = new CreateIndexRequest(indexName);
  14. XContentBuilder builder = XContentFactory.jsonBuilder();
  15. builder.startObject();
  16. {
  17. builder.startObject("properties");
  18. {
  19. //创建订单ID文档字段
  20. builder.startObject("order_id");
  21. {
  22. builder.field("type", "long");
  23. }
  24. builder.endObject();
  25. //创建订单编号文档字段
  26. builder.startObject("order_no");
  27. {
  28. builder.field("type", "text");
  29. }
  30. builder.endObject();
  31. //创建商品名称文档字段
  32. builder.startObject("product_name");
  33. {
  34. builder.field("type", "keyword");
  35. }
  36. builder.endObject();
  37. //创建商品数量文档字段
  38. builder.startObject("product_quantity");
  39. {
  40. builder.field("type", "integer");
  41. }
  42. builder.endObject();
  43. //创建商品价格文档字段
  44. builder.startObject("price");
  45. {
  46. builder.field("type", "double");
  47. }
  48. builder.endObject();
  49. //创建订单发送状态文档字段
  50. builder.startObject("sent");
  51. {
  52. builder.field("type", "boolean");
  53. }
  54. builder.endObject();
  55. //创建订单日期文档字段
  56. builder.startObject("order_date");
  57. {
  58. builder.field("type", "date");
  59. }
  60. builder.endObject();
  61. //创建订单备注文档字段
  62. builder.startObject("order_remark");
  63. {
  64. builder.field("type", "text")
  65. //插入时分词
  66. .field("analyzer", "ik_smart")
  67. //搜索时分词
  68. .field("search_analyzer", "ik_max_word");
  69. }
  70. builder.endObject();
  71. }
  72. builder.endObject();
  73. }
  74. builder.endObject();
  75. request.mapping(builder);
  76. //2客户端执行请求,请求后获得响应
  77. CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
  78. result = true;
  79. }
  80. catch (Exception ex)
  81. {
  82. ex.printStackTrace();
  83. }
  84. return result;
  85. }

编写测试方法:

  1. @Autowired
  2. private MeetElasticsearchService meetElasticsearchService;
  3. /**
  4. * 测试:创建索引
  5. * @author pan_junbiao
  6. */
  7. @Test
  8. public void createIndex()
  9. {
  10. //索引名称
  11. String indexName = "order_info";
  12. //执行创建索引
  13. boolean result = meetElasticsearchService.createIndex(indexName);
  14. //打印结果
  15. if(result)
  16. {
  17. System.out.println("索引创建成功");
  18. }
  19. else
  20. {
  21. System.out.println("索引创建失败");
  22. }
  23. }

使用 ElasticSearch-head 插件查看执行结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/503730
推荐阅读
相关标签
  

闽ICP备14008679号