ElasticSearch实战(二) 索引、类型、映射

在插入一条Blog后,使用浏览器打开 http://localhost:9200/website/_mapping/blog?pretty 显示信息如下:

{
	"website": {
		"mappings": {
			"blog": {
				"properties": {
					"author": {
						"type": "text",
						"fields": {
							"keyword": {
								"type": "keyword",
								"ignore_above": 256
							}
						}
					},
					"date": {
						"type": "long"
					},
					"id": {
						"type": "long"
					},
					"likes": {
						"type": "long"
					},
					"text": {
						"type": "text",
						"fields": {
							"keyword": {
								"type": "keyword",
								"ignore_above": 256
							}
						}
					}
				}
			}
		}
	}
}

上面JSON格式的内容中描述了四项关键信息:索引、类型、字段和映射。

  • 索引(index)

内容中的"website",类比关系数据库中的库

  • 类型(type)

内容中的"blog",类比关系数据库中的表

  • 字段(field)

内容中的author、date、id、likes和text,类比关系数据库中的列

  • 映射(mapping)

描述字段的保存方式等,如"type": "long",类比关系数据库中的列的数据类型。

注意author和text字段,除了本身被映射为text类型,还另外为其添加了名称为keyword、type为keyword的field,这使得查询时既可以对字段本身做Match Query,也可以对author.keyword做Term Query。

不同于关系型数据库要预先创建库和表,在添加第一个Blog时,Elasticsearch即使用动态映射猜测字段类型,得出上述映射。映射在创建后不可修改,如果需要自己指定映射类型,可以通过下面的方式。

1 删除原索引

elasticsearchTemplate.deleteIndex("website");

2 通过注解设置字段类型

@Document(indexName = "website", type = "blog")
public class Blog {

    private int id;
    private String author;
    private String text;
    private int likes;

    @Field(type = FieldType.Date)
    private Date date;

3 创建索引并设置映射

elasticsearchTemplate.createIndex("website");
elasticsearchTemplate.putMapping(Blog.class);

重新用 http://localhost:9200/website/_mapping/blog?pretty 查看映射,可以看到date字段已经设置为日期类型

{
  "website" : {
    "mappings" : {
      "blog" : {
        "properties" : {
          "date" : {
            "type" : "date"
          }
        }
      }
    }
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值