目录
索引库属性解释
mappings:是对索引库中文档的约束;常见属性如下:
-
type:数据类型
-
index:是否索引
-
analyzer:分词器
-
properties:子字段
type: 字段数据类型,常见的类型有:
-
字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
-
数值:long、integer、short、byte、double、float
-
布尔:boolean
-
日期:date
-
对象:object
index:是否创建索引,默认为true(需要根据某个字段查询,默认为true;不需要查询当前字段设置为false)
analyzer:使用哪种分词器(只有text值需要分词,其他基本不需要要)
properties:该字段的子字段
DSL创建索引库
ES中通过Restful请求操作索引库、文档。请求内容用DSL语句来表示。
语法
PUT /索引库名称
{
"mappings": {
"properties": {
"字段名1": {
"type": "text",
"analyzer": "ik_smart"
},
"字段名2": {
"type": "keyword",
"index": "false"
},
"字段名3": {
"properties": {
"子字段": {
"type": "keyword"
}
}
},
// ...省略
}
}
}
示例
PUT /user
{
"mappings": {
"properties":{
"info": {
"type": "text",
"analyzer": "ik_smart"
},
"name": {
"type": "keyword",
},
"email": {
"type": "keyword",
"index": false
},
"address": {
"type": "object",
"properties": {
"province": {
"type": "keyword"
},
"city": {
"type": "keyword"
},
"district": {
"type": "keyword"
}
}
}
}
}
}
DSL修改索引库
修改索引库和mapping一旦创建无法修改,但是可以添加新的字段。
语法
PUT /索引库名/_mapping
{
"properties": {
"新字段名": {
"type": "integer"
}
}
}
示例
PUT /user/_mapping
{
"properties": {
"age": {
"type": "integer"
}
}
}
DSL查看索引库
语法
GET /索引库名
示例
GET /user
DSL删除索引库
语法
DELETE /索引库名
示例
DELETE /user
RestClient初始化
// 开始
this.client = new RestHightLevelClient(RestClient.builder(HttpHost.create("http://192.168.150.101:9200")));
// 结束
this.client.close();
RestClient创建索引库
语法
void testCreateIndex() throws IOException {
// 创建Request对象
CreateIndexRequest request = new CreateIndexRequest('IndexTable');
// 请求参数,MAPPING_TEMPLATE是静态的常量字符串,内容是创建索引库的DSL语句
request.source(MAPPING_TEMPLATE, XContentType.JSON);
// 发起请求
client.indeices().create(request,RequestOption.DEFAULT);
}
IndexTable:索引库名
MAPPING_TEMPLATE:创建索引库的DSL语句,这里暂时定义成了一个常量,方便阅读
indeices():返回的对象中包含索引库操作的所有方法
示例
void testCreateIndex() throws IOException {
// 创建Request对象
CreateIndexRequest request = new CreateIndexRequest('user');
// 请求参数,MAPPING_TEMPLATE是静态的常量字符串,内容是创建索引库的DSL语句
request.source(MAPPING_TEMPLATE, XContentType.JSON);
// 发起请求
client.indeices().create(request,RequestOption.DEFAULT);
}
RestClient删除索引库
语法
void testDeleteIndex() throws IOException {
// 创建Request对象
DeleteIndexRequest request = new DeleteIndexRequest('IndexTable');
// 发起请求
client.indices().delete(request, RequestOption.DEFAULT);
}
IndexTable:索引库名称
示例
void testDeleteIndex() throws IOException {
// 创建Request对象
DeleteIndexRequest request = new DeleteIndexRequest('user');
// 发起请求
client.indices().delete(request, RequestOption.DEFAULT);
}
RestClient判断索引库是否存在
语法
void testExistsIndex() throws IOException {
// 创建Request对象
GetIndexRequest request = new GetIndexRequest('indexTable');
// 发起请求
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
// 输出
System.out.println(exists);
}
indexTable:索引库名称
示例
void testExistsIndex() throws IOException {
// 创建Request对象
GetIndexRequest request = new GetIndexRequest('user');
// 发起请求
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
// 输出
System.out.println(exists);
}