0%

Elasticsearch Java Api

Elasticsearch Java Api

elasticsearch有很多Java Api提供使用

TransportClient

使用最原始的TransportClient来进行操作

1
2
3
4
5
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.4.0</version>
</dependency>

创建TransportClient,后续操作都需要用到该对象

1
2
3
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getLocalHost(),
9300));

索引操作

创建索引管理客户端,后续索引管理都需要用到该对象

1
IndicesAdminClient indices = client.admin().indices();
1
2
3
// 判断索引是否存在
IndicesExistsResponse existsResponse = indices.prepareExists("index2").get();
System.out.println(existsResponse.isExists());
1
2
3
4
// 判断type是否存在
TypesExistsResponse typesExistsResponse = indices.prepareTypesExists("index2")
.setTypes("default").get();
System.out.println(typesExistsResponse.isExists());
1
2
3
4
5
6
// 创建一个索引
CreateIndexResponse createIndexResponse = indices.prepareCreate("index3")
.setSettings(Settings.builder().put("index.number_of_shards",3)
.put("index.number_of_replicas",1))
.get();
System.out.println(createIndexResponse.isAcknowledged());
1
2
3
4
5
// 更新settings
UpdateSettingsResponse settingsResponse = indices.prepareUpdateSettings("index3")
.setSettings(Settings.builder().put("index.number_of_replicas", 2))
.get();
System.out.println(settingsResponse.isAcknowledged());
1
2
3
4
5
6
7
8
9
// 获取settings
GetSettingsResponse getSettingsResponse = indices.prepareGetSettings("index3").get();
getSettingsResponse.getIndexToSettings().forEach(
cursor -> {
String index = cursor.key;
Settings settings = cursor.value;
Integer number_of_replicas = settings.getAsInt("index.number_of_replicas", null);
}
);
1
2
3
4
5
6
// 设置mapping
// {"properties":{"name":{"type":"keyword"}}}
CreateIndexResponse createIndexAddMappingResponse = indices.prepareCreate("index4")
.addMapping("default", XContentFactory.jsonBuilder().startObject().startObject("properties")
.startObject("name").field("type", "keyword").endObject().endObject().endObject()
).get();
1
2
3
4
5
6
// 获取mapping
GetMappingsResponse mappingsResponse = indices.prepareGetMappings("index4").get();
ImmutableOpenMap<String, MappingMetaData> index4Mappings = mappingsResponse.getMappings().get("index4");
// type
MappingMetaData metaData = index4Mappings.get("default");
System.out.println(metaData.sourceAsMap());
1
2
3
// 删除索引
DeleteIndexResponse deleteIndexResponse = indices.prepareDelete("index4").get();
System.out.println(deleteIndexResponse.isAcknowledged());

文档操作

1
2
3
4
5
6
7
// 创建文档
Map<String,Object> doc = new HashMap<>();
doc.put("name","zhangsan");
doc.put("age",20);
IndexResponse indexResponse = client.prepareIndex("index5", "default", "1")
.setSource(doc).get();
System.out.println(indexResponse.status());
1
2
3
// 根据文档id获取数据
GetResponse response = client.prepareGet("index5", "default", "1").get();
System.out.println(response.getSourceAsString());
1
2
3
4
// 更新文档
UpdateResponse updateResponse = client.prepareUpdate("index5", "default", "1")
.setDoc(XContentFactory.jsonBuilder().startObject().field("age", 18)
.endObject()).get();
1
2
3
// 删除文档
DeleteResponse deleteResponse = client.prepareDelete("index5", "default", "1").get();
System.out.println(deleteResponse.status());
1
2
3
4
5
6
7
// 查询删除
BulkByScrollResponse deleteByQuery = DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
.filter(QueryBuilders.matchQuery("age", 20))
.source("index5") // 索引
.get();
// 返回删除的条数
System.out.println(deleteByQuery.getDeleted());

查询操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// match_all 查询
MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
// match_phrase_prefix 查询
MatchPhrasePrefixQueryBuilder matchPhrasePrefixQueryBuilder = QueryBuilders.matchPhrasePrefixQuery("name", "zhangs");
// match_phrase查询
MatchPhraseQueryBuilder matchPhraseQueryBuilder = QueryBuilders.matchPhraseQuery("name", "zhangsan");

// term查询
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zhangsan");
// wildcard查询
WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery("name", "zhang*");
// fuzzy查询
FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("name", "zhang");

// bool 查询
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("name", "zhangsan"))
.should(QueryBuilders.matchQuery("age", 20));


client.prepareSearch("index6")
.setQuery(matchAllQueryBuilder)
.setSize(10)
.get();

欢迎关注我的其它发布渠道