喵星之旅-狂奔的兔子-java客户端操作es中文分词器(ik)

分词器在创建索引时使用,如果使用java创建索引的话

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();


}

调用方法样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@RequestMapping("/bunnytestes/ik")
public String testik(@RequestParam(name="name") String name) throws IOException {
List<String> isanalyzer = new ArrayList<>();
List<String> fields = new ArrayList<>();
List<String> types = new ArrayList<>();

isanalyzer.add("1");
fields.add("name");
types.add("text");

isanalyzer.add("2");
fields.add("addr");
types.add("text");


boolean f = elasticsearchUtil.createIndexUseIk(name, isanalyzer, fields, types);
return "" + f;
}
文章目录
|