Execute Raw Elasticsearch Query using Transport Client – Java API

           The following sample program details on how to execute raw Elasticsearch query using Transport Client (Java API). 

Maven Dependencies:



           Add the above MAVAN dependencies to the POM file or add the JARs specified in the POM to the classpath.

Sample Program:

package elasticsearch;
import java.util.Map;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.search.SearchHitField;
import org.elasticsearch.search.SearchHits;
import org.json.JSONObject;

public class test {
    public static void main(String[] args) {

        //Cluster Name - samplename
        Settings settings = ImmutableSettings.settingsBuilder().put("client.transport.sniff", true).put("cluster.name", "samplename").build();

        //Specify the IP address of Elasticsearch Master Node
        Client esclient = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("IP", 9300));

        //Sample Query
        String queryString = "{\"query\":{\"query_string\":{\"query\":\"field:value\"}},\"fields\": [\"fieldname\"]}";

        //Sample Query - JSONObject
        //We convert the raw query string to JSONObject to avoid query parser error in Elasticsearch
        JSONObject queryStringObject = new JSONObject(queryString);

        //Elasticsearch Response
        SearchResponse response = esclient.prepareSearch("indexName").setTypes("typeName").setSource(queryStringObject.toString()).execute().actionGet();

        //Elasticsearch Response Hits
        SearchHits hits = response.getHits();

        //Iterate SearchHits Object to get the Documents
        //i.e. For each document
        for (int i = 0; i < hits.totalHits(); i++) {

            //Fields Object for each document
            Map<String, SearchHitField> responseFields = hits.getAt(i).getFields();

            //Access required field
            SearchHitField field = responseFields.get("fieldname");

            //Print field value
            //field.getValue() return single value
            //field.getValues()returns the value in an array

        //Close Transport Client Connection

Related Links: 

Web Application for Elasticsearch :
  1. ElasticTab – Elasticsearch to Excel Report (Web Application)
Elasticsearch Plugin:
  1. Elasticsearch Plugin To Generate (Save and E-Mail) Excel Reports
  1. Execute Multiple Search Query in Elasticsearch
  2. Monitor Elasticsearch Servers with Shell Script - E-Mail Notification
  3. Execute Raw Elasticsearch Query using Transport Client – Java API
  4. Elasticsearch – Apply Nested Filter on Nested (Inner) Aggregation
  5. Execute Multiple Search Query in Elasticsearch
  6. Enable CORS to Send Cross Domain Request to Elasticsearch using AJAX
  7. Elasticsearch Java API – Get Index List
  8. Elasticsearch Java API – Get Alias List
  9. Elasticsearch Java API - Get Type List from given Index
  10. Elasticsearch Java API – Get Field List for a given Index and Type
  11. Elasticsearch Java API – Get Index Type List Mapping
  12. Elasticsearch – Use Script Filter/Conditon in Aggregation/Sub-Aggreagtion
  13. Elasticsearch – Compare/ScriptFilter/Condition on Two Fields using Script Filter – REST Query + Java API
  14. Elasticsearch - Date/Time(String)  Add/Subtract Duration - Days,Months,Years,Hours,Minutes,Seconds
  15. Elasticsearch Geo-Shape Slow Indexing Performance - Solved
  16. Chrome Elasticsearch Sense Not Working – Solved
  1. Logstash – Process Log File Once and Exit/Stop Logstash After Reading Log File Once
  2. Measure Logstash Performance using Metrics Filter – Issue/Error in Syntax (Unknown setting ‘message’ for stdout)
  3. Logstash – Process Same Log File (File Input) from Beginning/Start
  4. Create Custom Filter/Plugin to Emit New Events Manually in Logstash
Logstash and Elasticsearch:
  1. Query Elasticsearch Cluster in Filter Section when using Logstash
  2. Custom Elasticsearch Index Name/Type Name based on Events in Logstash
MongoDB and Elasticsearch:
  1. Import Data from Mongo DB to Elasticsearch using Elasticsearch River

Leave a Reply