【自学elasticsearch7】结合es语法和java的HighLevelClient:索引(映射)创建
写在开头
大学毕业入职半年的菜鸡第一篇博客,多次在项目中简单使用过es,es的介绍和故事等随处可见,不再赘述,官方的地址贴在这里,废话不多说,直接进入正题。
注意:官方文档基于es2,本文基于es7
开箱即用的elasticsearch
windows下为例(环境变量中请配置好JAVA_HOME):
下载解压后双击/bin/elasticsearch.bat即可启动es,访问地址:localhost:9200,出现以下信息为访问成功!
下载解压后双击/bin/kibana.bat即可启动kibana,访问地址:localhost:5601
注:如果需要本地kibana连接其它服务器的es,可修改/bin/config/kibana.yml的elasticsearch.hosts: [“服务器地址:9200”]
如需安装ik中文分词器可参考ik分词器安装
用curl语句在es中创建第一个索引(映射)
PUT /firstmapping
{
"mappings": {
"properties": {
"title":{
"type":"keyword"
},
"content":{
"type": "text"
},
"score":{
"type": "double"
}
}
}
}
其中mapping定义该语句为一条映射语句,properties下填写索引的字段名(title,content,score),type为字段的类型(从es5开始不再支持string类型,将string类型拆分为text和keyword,其中keyword类型字段不可进行分词搜索)
es的常用类型如下:
(1)字符串:
- text 于全索引,搜索时会自动使用分词器进分词再匹配
- keyword 不分词,搜索时需要匹配完整的值
(2)数值型
- 整型: byte,short,integer,long
- 浮点型: float, half_float, scaled_float,double
(3)日期类型
- date
其它的类型可以参考这里,不再赘述:常用类型参考
用HighLevelClient创建第一个索引(映射)
导入es7的依赖:
<properties>
<!--声明es版本,很重要!!!!-->
<elasticsearch.version>7.13.0</elasticsearch.version>
</properties>
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.13.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.13.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.13.0</version>
</dependency>
</dependencies>
创建client配置类:
@Configuration
public class Client {
@Value("${es.url}") //可在配置文件中添加添加多个es地址,配置es集群
private String esUrl;
@Bean
RestHighLevelClient configRestHighLevelClient() throws Exception{
String[] esUrls = esUrl.split(",");
List<HttpHost> httpHosts = new ArrayList<>();
for (String url : esUrls) {
String[] esPort = url.split(":");
httpHosts.add(new HttpHost(esPort[0],Integer.parseInt(esPort[1]),"http"));
}
return new RestHighLevelClient(
RestClient.builder(httpHosts.toArray(new HttpHost[0]))
);
}
}
创建映射的主要代码:
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
builder.startObject("mappings");
{
builder.startObject("properties");
{
builder.startObject("title");
{
builder.field("type", "keyword");
}
builder.endObject();
builder.startObject("content");
{
builder.field("type", "text");
}
builder.endObject();
builder.startObject("score");
{
builder.field("type", "double");
}
builder.endObject();
}
builder.endObject();
}
builder.endObject();
}
builder.endObject();
CreateIndexRequest index = new CreateIndexRequest("secondmapping");
index.source(builder);
client.indices().create(index, RequestOptions.DEFAULT);