索引条件构造器
# LambdaEsIndexWrapper
提示
索引的CRUD中的相关条件依托于此构造器进行封装,此方式为框架最早提供的一种索引创建方式,现阶段已不推荐,推荐使用自定义注解+mapper.createIndex()方式一键创建,更简单,更便捷,可参考索引托管章节文档.
# API说明
LambdaEsIndexWrapper提供了下述API可供用户使用
mapping(R column, FieldType fieldType);
mapping(R column, FieldType fieldType, Boolean fieldData);
mapping(R column, FieldType fieldType, Float boost);
mapping(R column, FieldType fieldType, Boolean fieldData, Float boost);
mapping(R column, FieldType fieldType, String dateFormat);
mapping(R column, FieldType fieldType, String analyzer, String searchAnalyzer);
mapping(R column, FieldType fieldType, String analyzer, String searchAnalyzer, String dateFormat);
mapping(R column, FieldType fieldType, String analyzer, String searchAnalyzer, Float boost);
mapping(R column, FieldType fieldType, String analyzer, String searchAnalyzer, String dateFormat, Boolean fieldData, Float boost);
mapping(Map<String, Object> mapping);
createAlias(String aliasName);
settings(Settings settings);
settings(Integer shards, Integer replicas);
maxResultWindow(Integer maxResultWindow);
indexName(String... indexNames);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 使用案例
/**
* LambdaEsIndexWrapper构造器使测案例一:创建索引,通过开箱即用的方法创建
*/
@Test
public void testCreateIndex() {
LambdaEsIndexWrapper<Document> wrapper = new LambdaEsIndexWrapper<>();
// 此处简单起见 索引名称须保持和实体类名称一致,字母小写 后面章节会教大家更如何灵活配置和使用索引
wrapper.indexName(Document.class.getSimpleName().toLowerCase());
// 此处将文章标题映射为keyword类型(不支持分词),文档内容映射为text类型(支持分词查询)
wrapper.mapping(Document::getTitle, FieldType.KEYWORD, 2.0f)
.mapping(Document::getLocation, FieldType.GEO_POINT)
.mapping(Document::getGeoLocation, FieldType.GEO_SHAPE)
.mapping(Document::getContent, FieldType.TEXT, Analyzer.IK_SMART, Analyzer.IK_MAX_WORD);
// 设置分片及副本信息,可缺省
wrapper.settings(3, 2);
// 设置别名信息,可缺省
String aliasName = "daily";
wrapper.createAlias(aliasName);
// 设置父子信息,若无父子文档关系则无需设置
wrapper.join("joinField", "document", "comment");
// 创建索引
boolean isOk = documentMapper.createIndex(wrapper);
Assertions.assertTrue(isOk);
}
/**
* LambdaEsIndexWrapper构造器使测案例二:创建索引,通过自定义map 最难用但也最灵活
*/
@Test
public void testCreateIndexByMap() {
// 演示通过自定义map创建索引,最为灵活,若方案一不能满足时可用此方法
LambdaEsIndexWrapper<Document> wrapper = new LambdaEsIndexWrapper<>();
wrapper.indexName(Document.class.getSimpleName().toLowerCase());
wrapper.settings(3, 2);
Map<String, Object> map = new HashMap<>();
Map<String, Object> prop = new HashMap<>();
Map<String, String> field = new HashMap<>();
field.put("type", FieldType.KEYWORD.getType());
prop.put("this_is_field", field);
map.put("properties", prop);
wrapper.mapping(map);
boolean isOk = documentMapper.createIndex(wrapper);
Assertions.assertTrue(isOk);
}
/**
* LambdaEsIndexWrapper构造器使测案例三:更新索引(不推荐使用,因为索引变动ES会重建索引,有其它更好的方式,可参考后面索引托管章节)
*/
@Test
public void testUpdateIndex() {
// 测试更新索引
LambdaEsIndexWrapper<Document> wrapper = new LambdaEsIndexWrapper<>();
// 指定要更新哪个索引
String indexName = Document.class.getSimpleName().toLowerCase();
wrapper.indexName(indexName);
wrapper.mapping(Document::getCreator, FieldType.KEYWORD);
wrapper.mapping(Document::getGmtCreate, FieldType.DATE);
boolean isOk = documentMapper.updateIndex(wrapper);
Assertions.assertTrue(isOk);
}
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
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
帮助我们改善此文档 (opens new window)
上次更新: 2024/05/18