ElasticSearch
ElasticSearch copied to clipboard
:globe_with_meridians: This application illustrates and demonstrates use of ElasticSearch Java API in the backend
A Demonstration of How to Use the Elasticsearch Java API
This repository demonstrates the use of Elasticsearch Java API via Java High Level REST Client. If you want to see the sample of the old version, please visit the oldVersion branch.
What you will learn in this repository?
- How to use Java High Level REST Client
- How to perform Administration operations
- Index creation
- Mapping settings
- How to perform CRUD operations
Initialization Java High Level REST Client
@Bean(destroyMethod = "close")
public RestHighLevelClient getRestClient() {
return new RestHighLevelClient(RestClient.builder(new HttpHost(props.getClients().getHostname(),
props.getClients().getHttpPort(), props.getClients().getScheme())));
}
Index creation and Shard, Replica settings with Java High Level REST Client
final GetIndexRequest request = new GetIndexRequest(props.getIndex().getName());
final boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
if (!exists) {
final CreateIndexRequest indexRequest = new CreateIndexRequest(props.getIndex().getName());
indexRequest.settings(Settings.builder()
.put("index.number_of_shards", props.getIndex().getShard())
.put("index.number_of_replicas", props.getIndex().getReplica())
);
final CreateIndexResponse createIndexResponse = client.indices().create(indexRequest, RequestOptions.DEFAULT);
if (createIndexResponse.isAcknowledged() && createIndexResponse.isShardsAcknowledged()) {
log.info("{} index created successfully", props.getIndex().getName());
} else {
log.debug("Failed to create {} index", props.getIndex().getName());
}
}
Mapping Settings
final PutMappingRequest mappingRequest = new PutMappingRequest(props.getIndex().getName());
final XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
...
builder.endObject();
mappingRequest.source(builder);
final AcknowledgedResponse putMappingResponse = client.indices().putMapping(mappingRequest, RequestOptions.DEFAULT);
if (putMappingResponse.isAcknowledged()) {
log.info("Mapping of {} was successfully created", props.getIndex().getName());
} else {
log.debug("Creating mapping of {} failed", props.getIndex().getName());
}
Using SearchSourceBuilder and showing search results
sourceBuilder.query(builder);
SearchRequest searchRequest = getSearchRequest();
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();
SearchHit[] searchHits = hits.getHits();
for (SearchHit hit : searchHits) {
Document doc = gson.fromJson(hit.getSourceAsString(), Document.class);
doc.setId(hit.getId());
result.add(doc);
}
Using Query String with Wildcard
result = getDocuments(QueryBuilders.queryStringQuery("*" + query.toLowerCase() + "*"));
Document deletion
final DeleteRequest deleteRequest = new DeleteRequest(props.getIndex().getName(), id);
client.delete(deleteRequest, RequestOptions.DEFAULT);
How to compile?
mvn clean install
The docker-maven-plugin needs Docker daemon, if you don't have it you should use -Dmaven.test.skip=true -Ddocker.skip parameters.
How to run?
mvn spring-boot:run
With this option, you should provide an elasticsearch server.
How to run with Docker?
sh run.sh
With this option, this application and an elasticsearch server run together.
