• elasticsearch的javaAPI之query


    elasticsearch的javaAPI之query API

    the Search API同意运行一个搜索查询,返回一个与查询匹配的结果(hits)。 它能够在跨一个或多个index上运行, 或者一个或多个types。 查询能够使用提供的 query Java API 或filter Java API 。 搜索请求的主体是建立使用 SearchSourceBuilder上。 这里有一个样例:

    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.action.search.SearchType;
    import org.elasticsearch.index.query.FilterBuilders.*;
    import org.elasticsearch.index.query.QueryBuilders.*;
    SearchResponse response = client.prepareSearch("index1", "index2")
            .setTypes("type1", "type2")
            .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
            .setQuery(QueryBuilders.termQuery("multi", "test"))             // Query
            .setPostFilter(FilterBuilders.rangeFilter("age").from(12).to(18))   // Filter
            .setFrom(0).setSize(60).setExplain(true)
            .execute()
            .actionGet();

    请注意,全部參数都是可选的。 这是你能够写的最小的搜索:

    // MatchAll on the whole cluster with all default options
    SearchResponse response = client.prepareSearch().execute().actionGet();

    在Java中使用scrolls

    scroll documentation

    一个搜索请求返回类似a“page”of result。而scroll API能够用一个搜索语句,检索大量的结果(甚至全部的结果),与传统的使用游标查询数据库一样。

    scrolling不用于实时请求,而是处理大量的数据,比如为了不同的配置,重建索引的内容

     

    import static org.elasticsearch.index.query.FilterBuilders.*;
    import static org.elasticsearch.index.query.QueryBuilders.*;
    
    QueryBuilder qb = termQuery("multi", "test");
    
    SearchResponse scrollResp = client.prepareSearch(test)
            .setSearchType(SearchType.SCAN)
            .setScroll(new TimeValue(60000))
            .setQuery(qb)
            .setSize(100).execute().actionGet(); //100 hits per shard will be returned for each scroll
    //Scroll until no hits are returned
    while (true) {
    
        for (SearchHit hit : scrollResp.getHits()) {
            //Handle the hit...
        }
        scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(600000)).execute().actionGet();
        //Break condition: No hits are returned
        if (scrollResp.getHits().getHits().length == 0) {
            break;
        }
    }

    线程操作

    The search API同意你设置线程来运行操作。这样实际姜运行API上运行的是同样的节点上(API上运行一个分配在同一server的shard上)。

    这里有三种threading modes, The NO_THREADS 模式意味着查询操作将zaicalling thread上运行。 SINGLE_THREAD 模式意味着将对local shards运行搜索操作,是在single different thread。THREAD_PER_SHARD 意味着搜索操作将在不同的线程上运行,对于每个local shard。

    默认的模式是 THREAD_PER_SHARD

    MultiSearch API

    SearchRequestBuilder srb1 = node.client()
        .prepareSearch().setQuery(QueryBuilders.queryString("elasticsearch")).setSize(1);
    SearchRequestBuilder srb2 = node.client()
        .prepareSearch().setQuery(QueryBuilders.matchQuery("name", "kimchy")).setSize(1);
    
    MultiSearchResponse sr = node.client().prepareMultiSearch()
            .add(srb1)
            .add(srb2)
            .execute().actionGet();
    
    // You will get all individual responses from MultiSearchResponse#getResponses()
    long nbHits = 0;
    for (MultiSearchResponse.Item item : sr.getResponses()) {
        SearchResponse response = item.getResponse();
        nbHits += response.getHits().getTotalHits();
    }

    Using facets

    以下的代码显示了怎样在你的搜索里加入两个facets:

    SearchResponse sr = node.client().prepareSearch()
        .setQuery(QueryBuilders.matchAllQuery())
        .addFacet(FacetBuilders.termsFacet("f1").field("field"))
        .addFacet(FacetBuilders.dateHistogramFacet("f2").field("birth").interval("year"))
        .execute().actionGet();
    
    // Get your facet results
    TermsFacet f1 = (TermsFacet) sr.getFacets().facetsAsMap().get("f1");
    DateHistogramFacet f2 = (DateHistogramFacet) sr.getFacets().facetsAsMap().get("f2");
    样例是facets的,可是Elasticsearch Aggregations也是不错的选择
     
    原文:http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/search.html#msearch
    翻译欠佳。希望不会对大家造成误导
  • 相关阅读:
    腾讯云短信接口完成验证码功能
    git使用的简要介绍
    drf分页组件补充
    drf中的jwt使用与手动签发效验
    django的认证演变过程分析
    drf三大认证补充
    drf三大认证
    IO事件
    配置Java环境变量
    各种O
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5169896.html
Copyright © 2020-2023  润新知