1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| /** * 功能描述:创建索引,配置ik分词器 * @Param: * @param index 创建的索引的名字 * @param isanalyzer ,fields,types 非空,长度一致。isanalyzer:是否使用分词器(1:不使用分词,2:使用分词):,fields:字段值,types:类型 * 例如:isanalyzer:{“1”,“2”,“2”},fields{“name”,“addr”,“detail”},types{“text”,“text”,“text”} * 表示该索引默认初始化3个字段,分别是“name”,“addr”,“detail”,类型都是text,并且“addr”,“detail”需要分词处理 * @Return: boolean 成功创建返回true,如果索引已经存在或者创建失败返回false * @Author: bunny
* @Description: 创建所引用,正常不应该执行的方法,慎用 */
public boolean createIndexUseIk(String index, List<String> isanalyzer, List<String> fields, List<String> types) throws IOException { if (isIndexExist(index)) { return false; } if (isanalyzer == null || fields == null || types == null || isanalyzer.size() != fields.size() || fields.size() != types.size()) { return false; } //1.创建索引请求 CreateIndexRequest request = new CreateIndexRequest(index); //突破1万条限制 request.settings(Settings.builder() .put("index.max_result_window", 2000000000) );
XContentBuilder builder = XContentFactory.jsonBuilder(); builder.startObject(); { builder.startObject("properties"); { for (int i = 0; i < isanalyzer.size(); i++) { if ("1".equals(isanalyzer.get(i))) { builder.startObject(fields.get(i)); { builder.field("type", types.get(i)); } builder.endObject(); } else { builder.startObject(fields.get(i)); { builder.field("type", types.get(i)) //插入时分词 .field("analyzer", "ik_max_word") //搜索时分词 .field("search_analyzer", "ik_max_word"); } builder.endObject(); } }
} builder.endObject(); } builder.endObject(); request.mapping("_doc" , builder);
//2.执行客户端请求 CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
return response.isAcknowledged();
}
|