赞
踩
字段类型必须映射到 Elasticsearch 的基本类型之一,并且需要添加有关如何索引字段的选项。
字段类型 | Elasticsearch 类型 | 说明 |
---|---|---|
string,varchar | keyword | 这是不可标记的文本字段,例如 CODE001 |
string,varchar,text | text | 这是要标记化的文本字段,例如 a nice text |
integer | integer | 这是一个整型(32位),例如 1、2、3 |
long | long | 这是一个长整型(64位) |
float | float | 这是一个浮点数(32位),例如 1.2 或 4.5 |
double | double | 这是一个 double 类型浮点数(64位) |
boolean | boolean | 这是一个布尔值:true 或 false |
date / datetime | date | 这是一个日期时间值 |
bytes / binary | binary | 这包含一些用于二进制数据的字节,例如文本或字节流 |
其他Elasticsearch映射类型:
keyword 类型:存储数据时候,不会分词建立索引,支持模糊、支持精确匹配;支持聚合、排序操作。
keyword 类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置 ignore_above 指定自持字符长度,超过给定长度后的数据将不被索引,无法通过 term 精确匹配检索返回结果。
使用场景: 存储邮箱号码、url、name、title,手机号码、主机名、状态码、邮政编码、标签、年龄、性别等数据。 用于筛选数据(例如: select * from x where status='open')、排序、聚合(统计))。 直接将完整的文本保存到倒排索引中。
text 类型:存储数据时候,会自动分词,并生成索引,支持全文检索、支持模糊、精确查询;不支持聚合和排序操作。
text 类型的最大支持的字符长度无限制,适合大字段存储。
使用场景: 存储全文搜索数据,例如:邮箱内容、地址、代码块、博客文章内容等。
默认结合 standard analyzer(标准解析器)对文本进行分词、倒排索引。 默认结合标准分析器进行词命中、词频相关度打分。
所以创建索引时,当字段需要进行排序、分组、聚合等操作时,需要使用 keyword 类型。
【实例】在 Elasticsearch 中创建订单索引。
首先定义一个订单信息(order_info)的数据表结构:
名称 | 类型 | 说明 |
---|---|---|
order_id | long | 订单ID |
order_no | text | 订单编号 |
product_name | keyword | 商品名称 |
product_quantity | integer | 商品数量 |
price | double | 商品价格 |
sent | boolean | 订单发送状态 |
order_date | date(time) | 订单日期 |
order_remark | text | 订单备注 |
(1)使用 Elasticsearch 指令创建索引
- PUT /order_info
- {
- "settings": {
- "index": {
- "number_of_shards": "2",
- "number_of_replicas": "1"
- }
- },
- "mappings": {
- "properties": {
- "order_id": {"type": "long"},
- "order_no": {"type": "text"},
- "product_name": {"type": "keyword"},
- "product_quantity": {"type": "integer"},
- "price": {"type": "double"},
- "sent": {"type": "boolean"},
- "order_date": {"type": "date"},
- "order_remark": {
- "type": "text",
- "analyzer": "ik_max_word"
- }
- }
- }
- }
参数说明:
number_of_shards:该参数控制组成索引的分片(Shard)的数量。
number_of_replicas:该参数可控制复制副本(Replica)的数量,也就是说,为了实现高可用性,在集群中复制数据的次数。比较好的做法是设置该值至少为1。
执行结果:
(2)使用 Java API 创建索引
- /**
- * 创建索引
- * @param indexName 索引名称
- * @author pan_junbiao
- */
- @Override
- public boolean createIndex(String indexName)
- {
- boolean result = false;
-
- try
- {
- //1.创建索引的请求
- CreateIndexRequest request = new CreateIndexRequest(indexName);
-
- XContentBuilder builder = XContentFactory.jsonBuilder();
- builder.startObject();
- {
- builder.startObject("properties");
- {
- //创建订单ID文档字段
- builder.startObject("order_id");
- {
- builder.field("type", "long");
- }
- builder.endObject();
-
- //创建订单编号文档字段
- builder.startObject("order_no");
- {
- builder.field("type", "text");
- }
- builder.endObject();
-
- //创建商品名称文档字段
- builder.startObject("product_name");
- {
- builder.field("type", "keyword");
- }
- builder.endObject();
-
- //创建商品数量文档字段
- builder.startObject("product_quantity");
- {
- builder.field("type", "integer");
- }
- builder.endObject();
-
- //创建商品价格文档字段
- builder.startObject("price");
- {
- builder.field("type", "double");
- }
- builder.endObject();
-
- //创建订单发送状态文档字段
- builder.startObject("sent");
- {
- builder.field("type", "boolean");
- }
- builder.endObject();
-
- //创建订单日期文档字段
- builder.startObject("order_date");
- {
- builder.field("type", "date");
- }
- builder.endObject();
-
- //创建订单备注文档字段
- builder.startObject("order_remark");
- {
- builder.field("type", "text")
- //插入时分词
- .field("analyzer", "ik_smart")
- //搜索时分词
- .field("search_analyzer", "ik_max_word");
- }
- builder.endObject();
- }
- builder.endObject();
- }
- builder.endObject();
- request.mapping(builder);
-
- //2客户端执行请求,请求后获得响应
- CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
-
- result = true;
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- }
-
- return result;
- }
编写测试方法:
- @Autowired
- private MeetElasticsearchService meetElasticsearchService;
-
- /**
- * 测试:创建索引
- * @author pan_junbiao
- */
- @Test
- public void createIndex()
- {
- //索引名称
- String indexName = "order_info";
-
- //执行创建索引
- boolean result = meetElasticsearchService.createIndex(indexName);
-
- //打印结果
- if(result)
- {
- System.out.println("索引创建成功");
- }
- else
- {
- System.out.println("索引创建失败");
- }
- }
使用 ElasticSearch-head 插件查看执行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。