当前位置: 首页 > elasticsearch, 搜索 > 正文

elasticsearch java client:搜索

1 星2 星3 星4 星5 星 (1 次投票, 评分: 5.00, 总分: 5)
Loading ... Loading ...
baidu_share

elasticsearch的查询是通过执行json格式的查询条件,在java api中就是构造QueryBuilder对象,elasticsearch完全支持queryDSL风格的查询方式,QueryBuilder的构建类是QueryBuilders,filter的构建类是FilterBuilders。下面是构造QueryBuilder的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import static org.elasticsearch.index.query.FilterBuilders.*; 
       import static org.elasticsearch.index.query.QueryBuilders.*; 
 
       QueryBuilder qb1 = termQuery("name", "kimchy"); 
 
       QueryBuilder qb2 = boolQuery() 
                           .must(termQuery("content", "test1")) 
                           .must(termQuery("content", "test4")) 
                           .mustNot(termQuery("content", "test2")) 
                           .should(termQuery("content", "test3")); 
 
       QueryBuilder qb3 = filteredQuery( 
                   termQuery("name.first", "shay"),  
                   rangeFilter("age") 
                       .from(23) 
                       .to(54) 
                       .includeLower(true) 
                       .includeUpper(false) 
                   );

其中qb1构造了一个TermQuery,对name这个字段进行项搜索,项是最小的索引片段,这个查询对应lucene本身的TermQuery。 qb2构造了一个组合查询(BoolQuery),其对应lucene本身的BooleanQuery,可以通过must、should、mustNot方法对QueryBuilder进行组合,形成多条件查询。 qb3构造了一个过滤查询,就是在TermQuery的基础上添加一个过滤条件RangeFilter,这个范围过滤器将限制查询age字段大于等于23,小于等于54的结果。除了这三个,elasticsearch还支持很多种类的查询方式,迟点写个介绍。

构造好了Query就要传到elasticsearch里面进行查询,下面是例子:

1
2
3
4
5
SearchResponse response = client.prepareSearch("test") 
        .setQuery(query) 
        .setFrom(0).setSize(60).setExplain(true) 
        .execute() 
        .actionGet();

这句的意思是,查询test索引,查询条件为query,从第0条记录开始,最多返回60条记录。返回结果为SearchResponse,下面解析SearchResponse:

1
2
3
4
5
SearchHits hits = searchResponse.hits();
        for (int i = 0; i < 60; i++) {
 
   System.out.println(hits.getAt(i).getSource().get("field"));
        }

获得SearchResponse中的SearchHits,然后hits.getAt(i).getSource().get(“field”)获得field字段的值。

本文固定链接: http://www.chepoo.com/elasticsearch-java-api-search.html | IT技术精华网

elasticsearch java client:搜索:等您坐沙发呢!

发表评论