Setting Up the Environment
- Ensure you have Java Development Kit (JDK) and a preferred IDE such as IntelliJ or Eclipse installed on your system.
- Include Elasticsearch's Java client library in your project's dependencies. Use Maven or Gradle for this purpose, based on your project setup.
<!-- Maven Dependency Example -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.17.5</version> <!-- Use the latest stable version -->
</dependency>
Configure the Elasticsearch Client
- Create and configure the `RestHighLevelClient` to interact with your Elasticsearch instance.
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
public class ElasticsearchConfig {
private static final String HOST = "localhost";
private static final int PORT = 9200;
public RestHighLevelClient createClient() {
return new RestHighLevelClient(
RestClient.builder(
new HttpHost(HOST, PORT, "http")
)
);
}
}
Create Index and Insert Documents
- Use the client to create an index and add documents to Elasticsearch.
- Ensure your document structure matches the index mapping for optimal performance.
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import java.io.IOException;
public class ElasticsearchOperations {
private final RestHighLevelClient client;
public ElasticsearchOperations(RestHighLevelClient client) {
this.client = client;
}
public void createIndex(String indexName, String id, String jsonContent) throws IOException {
IndexRequest request = new IndexRequest(indexName)
.id(id)
.source(jsonContent, XContentType.JSON);
IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);
System.out.println("Document indexed with ID: " + indexResponse.getId());
}
}
Querying Data
- Execute search queries to retrieve documents from Elasticsearch.
- Utilize query builders to construct complex search queries efficiently.
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
public class ElasticsearchSearch {
private final RestHighLevelClient client;
public ElasticsearchSearch(RestHighLevelClient client) {
this.client = client;
}
public void search(String indexName, String field, String value) throws IOException {
SearchRequest searchRequest = new SearchRequest(indexName);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchQuery(field, value));
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println("Search hits: " + searchResponse.getHits().getTotalHits().value);
}
}
Close the Client
- Ensure you properly close the `RestHighLevelClient` to release resources.
- Implement shutdown operations to enhance application stability.
public void closeClient() throws IOException {
if (client != null) {
client.close();
}
}
Best Practices
- Avoid hardcoding configurations; use environment variables or configuration files instead.
- Handle exceptions gracefully and implement retry mechanisms for better robustness.
- Regularly update your dependencies to include the latest security and performance improvements.