【Elasticsearch入门到落地】11、RestClient初始化索引库
接上篇《10、初始化RestClient》
上一篇我们已经完成了RestHighLevelClient的初始化工作,本篇将正式进入索引库的创建阶段。我们将使用Java代码来创建酒店数据的索引库。
一、准备工作
1. 创建常量类
首先,我们需要定义一个常量类来存放索引库的mapping映射模板。在src/main/java/cn/itcast/hotel/constants包下创建HotelIndexConstants类:
package cn.itcast.hotel.constants;public class HotelIndexConstants {public static final String MAPPING_TEMPLATE = "{\n" +" \"mappings\": {\n" +" \"properties\": {\n" +" \"id\": {\n" +" \"type\": \"keyword\"\n" +" },\n" +" \"name\": {\n" +" \"type\": \"text\",\n" +" \"analyzer\": \"ik_max_word\",\n" +" \"copy_to\": \"all\"\n" +" },\n" +" \"address\": {\n" +" \"type\": \"keyword\",\n" +" \"index\": false\n" +" },\n" +" \"price\": {\n" +" \"type\": \"integer\"\n" +" },\n" +" \"score\": {\n" +" \"type\": \"integer\"\n" +" },\n" +" \"brand\": {\n" +" \"type\": \"keyword\",\n" +" \"copy_to\": \"all\"\n" +" },\n" +" \"city\": {\n" +" \"type\": \"keyword\"\n" +" },\n" +" \"starName\": {\n" +" \"type\": \"keyword\"\n" +" },\n" +" \"business\": {\n" +" \"type\": \"keyword\",\n" +" \"copy_to\": \"all\"\n" +" },\n" +" \"pic\": {\n" +" \"type\": \"keyword\",\n" +" \"index\": false\n" +" },\n" +" \"location\": {\n" +" \"type\": \"geo_point\"\n" +" },\n" +" \"all\": {\n" +" \"type\": \"text\",\n" +" \"analyzer\": \"ik_max_word\"\n" +" }\n" +" }\n" +" }\n" +"}";
}
这个映射模板定义了酒店索引库中各个字段的类型和属性,与我们在《9、hotel数据结构分析》中分析的结果一致。
二、创建索引库代码实现
在HotelIndexTest测试类中添加创建索引库的测试方法:
@Test
void testCreateIndex() throws IOException {// 1.准备Request PUT /hotelCreateIndexRequest request = new CreateIndexRequest("hotel");// 2.准备请求参数request.source(HotelIndexConstants.MAPPING_TEMPLATE, XContentType.JSON);// 3.发送请求client.indices().create(request, RequestOptions.DEFAULT);
}
代码解析:
1.创建请求对象:
●CreateIndexRequest是Elasticsearch提供的创建索引请求类
●构造方法参数为索引库名称"hotel"
2.设置映射参数:
●使用request.source()方法设置索引库的mapping映射
●参数1是我们定义的映射模板常量MAPPING_TEMPLATE
●参数2指定了内容类型为JSON
3.发送请求:
●通过client.indices().create()方法发送创建索引请求
●第一个参数是请求对象
●第二个参数RequestOptions.DEFAULT表示使用默认请求选项
三、执行测试
1.确保Elasticsearch服务已启动(9200端口):
2.在IDEA中右键testCreateIndex()方法,选择"Run":
3.测试通过后,可以通过Kibana或Postman验证索引是否创建成功:
GET /hotel
如果返回结果中包含我们定义的mapping结构,说明索引库创建成功:
四、关键点说明
1.mapping设计:
●text类型字段使用ik_max_word分词器,支持中文分词
●keyword类型字段不进行分词,适合精确匹配
●geo_point类型用于存储地理位置坐标
●copy_to将多个字段值合并到all字段,实现全局搜索
2.异常处理:
●方法声明了throws IOException,因为网络请求可能抛出IO异常
●如果索引已存在,会抛出ResourceAlreadyExistsException
3.扩展性:
●映射模板单独定义为常量,便于维护和复用
●可以轻松修改模板内容后重新创建索引
五、总结
本篇我们完成了使用RestHighLevelClient创建索引库的代码实现,关键步骤包括:
1.定义mapping映射模板
2.创建CreateIndexRequest请求对象
3.设置mapping参数
4.发送创建请求
下一篇我们将讲解如何使用RestClient判断并删除索引库,以及如何向索引库中添加文档数据。
转载请注明出处:https://blog.csdn.net/acmman/article/details/147373328