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);

results matching ""

    No results matching ""