在Elasticsearch QueryBuilders中使用setFrom时,如何获取总结果计数?

时间:2018-12-24 05:25:35

标签: java spring-boot elasticsearch

我正在使用Elasticsearch QueryBuilders创建分页。我正在使用setFrom获得有限的分页结果。但是我需要总结果计数才能根据结果在分页中创建总页面链接。在setFrom应用于查询之前,如何获取总数?还是我必须再次编写相同的查询才能获得没有setFrom和size的总数?

这是我的查询

BoolQueryBuilder query = QueryBuilders.boolQuery();
for (String key : brands) {
    query.must(QueryBuilders.matchQuery("brand", key));
}

// search term
query.must(QueryBuilders.queryStringQuery(pSearchTerm + "*")
        .lenient(true).field("name"));

// price range
query.filter(QueryBuilders.rangeQuery("unit_price").from(min)
        .to(max));

SearchResponse searchresponse = client.prepareSearch("product")
        .setTypes("product").setQuery(query).setFrom(from).setSize(20)
        .setExplain(true).execute().actionGet();

SearchHit[] results = searchresponse.getHits().getHits();

4 个答案:

答案 0 :(得分:3)

您要查找的电话号码是cust_id,您可以从以下号码获得该电话号码:

 if (reader.Read())
    {
           byte[] data = (Byte[])reader["P1"];
           using (MemoryStream mStream = new    MemoryStream(data))
              {
                   Bitmap bm = new Bitmap(mStream);

                   pictureBox1.Image = bm;
              }
     }

答案 1 :(得分:2)

否,您不必再次编写查询。只需使用

hits.total

答案 2 :(得分:2)

SearchHits对象提供有关所有匹配的全局信息。

因此,您需要执行以下操作来获得总数:

db.lawcases.find().snapshot().forEach(
    function (elem) {
        db.lawcases.update(
            {
                _id: elem._id
            },
            {
                $set: {
                    name: elem.firstname + ' ' + elem.lastname
                }
            }
        );
    }
);

您可以查看documentation来满足其他需求。

答案 3 :(得分:1)

您可能必须再执行一次查询才能获得总点击数。看一下: Counting number of documents using Elasticsearch