Initialize
Settings settings = Settings.builder()
.put("cluster.name", "yourclustername").put("client.transport.sniff",true).build();
TransportClient client = newPreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
Term Query
// Query
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("country","California".toLowerCase());
// Search
SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index);
searchRequestBuilder.setTypes(type);
searchRequestBuilder.setQuery(termQueryBuilder);
//Execute
SearchResponse searchResponse = searchRequestBuilder.get();
找出country欄位中有包含"california"字段的檔案(使用"california"而不是"California"),因為standard analyzer將"California"轉換為"california"儲存在inverted index,需要跟索引文件的字段完全匹配才能找到。
Terms Query
只要指定字段包含任一给定的字段,就可以查詢到文件。
// Query
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery( "country", "比利時", "德國" );
// Search
SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index);
searchRequestBuilder.setTypes(type);
searchRequestBuilder.setQuery(termsQueryBuilder);
// Execute
SearchResponse searchResponse = searchRequestBuilder.get();
Range Query
// Query
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age");
rangeQueryBuilder.from(19);
rangeQueryBuilder.to(21);
rangeQueryBuilder.includeLower(true);
rangeQueryBuilder.includeUpper(true);
//RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").gte(19).lte(21);
// Search
SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index);
searchRequestBuilder.setTypes(type);
searchRequestBuilder.setQuery(rangeQueryBuilder);
// 执行
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
QueryBuilder queryBuilder = QueryBuilders.rangeQuery("age").gte(19).lte(21);
gte Greater than or equal-to
gt Greater than
lte Less than or equal-to
lt Less than
Nested Query
NestedQueryBuilder nestedQueryBuilder = QueryBuilders
.nestedQuery(
"keywords",
QueryBuilders.termQuery("keywords.keyword","北京"), ScoreMode.None);
SearchQuery searchQuery = new NativeSearchQuery(nestedQueryBuilder);