<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
<version>0.1.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
Suppose the elastic search stores indexed document with the following example mapping:
{ "name" : "xxx",
"age" : 11,
"address" : "xxxxx"}
Let's suppose the elasticsearch is running at 192.168.2.2:9200 and the indexed documents are stored under http://192.168.2.2:9200/myindex/mytype.
Let's create a simple java class representing this index document:
public class SearchResultTuple {
public String address;
public String name;
public int age;
}
We want to retrieves 20 records of the indexed documents from the elasticsearch matching using the following query:
{"from": 0, "size" : 20,
"sort" : {
"age" : { "order" : "asc" }
},
"query" : {
"filtered" : {
"query" : {
"match" : { "name" : "James" }
},
"filter" : {
"range" : { "age" : { "lte" : 10, "gte" : 20 } }
}
}
}
}
The java implementation to execute the above filtered query using JEST on ElasticSearch is shown below:
import io.searchbox.client.JestClient;
import io.searchbox.client.JestClientFactory;
import io.searchbox.client.config.HttpClientConfig;
import io.searchbox.core.Search;
import io.searchbox.core.SearchResult;
import io.searchbox.core.SearchResult.Hit;
import java.io.IOException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashSet;
import java.util.List;
import java.util.UUID;
import org.json.simple.JSONObject;
public class App
{
public static void main( String[] args )
{
JestClient client = openClient();
JSONObject json=new JSONObject();
json.put("from", 0);
json.put("size", 20);
JSONObject sortJson=new JSONObject();
json.put("sort", sortJson);
JSONObject sortDateJson=new JSONObject();
sortJson.put("age", sortDateJson);
sortDateJson.put("order", "asc");
JSONObject queryJson=new JSONObject();
json.put("query", queryJson);
JSONObject filteredJson=new JSONObject();
queryJson.put("filtered", filteredJson);
JSONObject queryMatchJson=new JSONObject();
filteredJson.put("query", queryMatchJson);
JSONObject matchJson=new JSONObject();
queryMatchJson.put("match", matchJson);
matchJson.put("name", "James");
JSONObject filterJson=new JSONObject();
filteredJson.put("filter", filterJson);
JSONObject rangeJson=new JSONObject();
filterJson.put("range", rangeJson);
JSONObject dateJson = new JSONObject();
rangeJson.put("age", dateJson);
dateJson.put("gte", 20);
dateJson.put("lte", 10);
String jsonString = json.toJSONString();
Search search = (Search) new Search.Builder(jsonString)
.addIndex("myindex")
.addType("mytype")
.build();
try {
SearchResult result = client.execute(search);
//System.out.println(result.getJsonString());
List<Hit<ElasticSearchResultTuple, Void>> hits = result.getHits(SearchResultTuple.class);
//System.out.println(hits.size());
for(Hit<SearchResultTuple, Void> hit : hits)
{
SearchResultTuple hitTuple = hit.source;
int age = hitTuple.age;
String name = hitTuple.name;
String address =hitTuple.address;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
client.shutdownClient();
}
private static JestClient openClient()
{
HttpClientConfig clientConfig = new HttpClientConfig.Builder("http://192.168.2.2:9200")
.multiThreaded(true).build();
JestClientFactory factory = new JestClientFactory();
factory.setHttpClientConfig(clientConfig);
JestClient jestClient = factory.getObject();
return jestClient;
}
}
No comments:
Post a Comment