Elasticsearch JAVA API 之 Search API


import org.elasticsearch.action.search.*;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;

import java.util.List;

/**
 * Created by root on 17-2-23.
 */
public class SearchDocument {
    /**
     *  ????
     * @param client
     */
    public static void search(Client client,String index,String type) {
      SearchResponse response = client.prepareSearch(index)
                .setTypes(type)
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                .setQuery(QueryBuilders.termQuery("name", "zhengzhi"))                 // Query
                .setPostFilter(QueryBuilders.rangeQuery("age").from(12).to(50))     // Filter
                .setFrom(0).setSize(60).setExplain(true)
                .get();

        SearchHit[] search2Hits = response.getHits().getHits();
        for (SearchHit searchHit : search2Hits) {
            String source = searchHit.getSource().toString();
            System.out.println("--------- searchByScroll source {}"+source);
        }
        // for
        client.close();
    }
    /**
     * ??scroll????
     */
    public static String searchByScroll(Client client,String index,String type) {
        SearchRequestBuilder searchRequestBuilder = client.prepareSearch();
        searchRequestBuilder.setIndices(index);
        searchRequestBuilder.setTypes(type);
        searchRequestBuilder.setScroll(new TimeValue(30000));

        SearchResponse searchResponse = searchRequestBuilder.get();
        String scrollId = searchResponse.getScrollId();
        SearchHit[] searchHits = searchResponse.getHits().getHits();
        for (SearchHit searchHit : searchHits) {
            String source = searchHit.getSource().toString();
            System.out.println("--------- searchByScroll source {}"+source);
        } // for
        client.close();


        return scrollId;

    }
    /**
     *  ????ID????
     * @param client
     * @param scrollId
     */
    public static void searchByScrollId(Client client, String scrollId){
        TimeValue timeValue = new TimeValue(30000);
        SearchScrollRequestBuilder searchScrollRequestBuilder;
        SearchResponse response;
        // ??
        while (true) {
            System.out.println("--------- searchByScroll scrollID {}"+scrollId);
            searchScrollRequestBuilder = client.prepareSearchScroll(scrollId);
            searchScrollRequestBuilder.setScroll(timeValue);
            // ??
            response = searchScrollRequestBuilder.get();
            // ??????????? ??????????? ?hits????
            if (response.getHits().getHits().length == 0) {
                break;
            }
            SearchHit[] searchHits = response.getHits().getHits();
            for (SearchHit searchHit : searchHits) {
                String source = searchHit.getSource().toString();
                System.out.println("--------- searchByScroll source {}"+source);
            } // for
            scrollId = response.getScrollId();

            client.close();
        }
    }
    /**
     * ????ID
     * @param client
     * @param scrollIdList
     * @return
     */
    public static boolean clearScroll(Client client, List<String> scrollIdList){
        ClearScrollRequestBuilder clearScrollRequestBuilder = client.prepareClearScroll();
        clearScrollRequestBuilder.setScrollIds(scrollIdList);
        ClearScrollResponse response = clearScrollRequestBuilder.get();
        return response.isSucceeded();
    }
    /**
     * ????ID
     * @param client
     * @param scrollId
     * @return
     */
    public static boolean clearScroll(Client client, String scrollId){
        ClearScrollRequestBuilder clearScrollRequestBuilder = client.prepareClearScroll();
        clearScrollRequestBuilder.addScrollId(scrollId);
        ClearScrollResponse response = clearScrollRequestBuilder.get();
        return response.isSucceeded();
    }

    public static void multiSearch(Client client){
        SearchRequestBuilder srb1 = client
                .prepareSearch().setQuery(QueryBuilders.queryStringQuery("football")).setSize(1);
        SearchRequestBuilder srb2 = client
                .prepareSearch().setQuery(QueryBuilders.matchQuery("name", "Aires")).setSize(1);

        MultiSearchResponse sr = client.prepareMultiSearch()
                .add(srb1)
                .add(srb2)
                .get();

// You will get all individual responses from MultiSearchResponse#getResponses()
        long nbHits = 0;
        for (MultiSearchResponse.Item item : sr.getResponses()) {
            SearchResponse response = item.getResponse();
            System.out.println(response.toString());
            nbHits += response.getHits().getTotalHits();
        }
        client.close();
    }
    public static void searchUseAggregations(Client client){
        SearchResponse sr = client.prepareSearch()
                .setQuery(QueryBuilders.matchAllQuery())
                .addAggregation(
                        AggregationBuilders.terms("agg1").field("name")
                )
                .addAggregation(
                        AggregationBuilders.dateHistogram("agg2")
                                .field("position")
                                .dateHistogramInterval(DateHistogramInterval.YEAR)
                )
                .get();

// Get your facet results
        Terms agg1 = sr.getAggregations().get("agg1");
//        DateHistogram agg2 = sr.getAggregations().get("agg2");
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值