Elasticsearch 基础教程

Elasticsearch 高级教程

Elasticsearch 插件

Elasticsearch 笔记

Elasticsearch FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/elasticsearch-count-api-and-elasticsearch-template-use.html

es(elasticsearch)count 查询 api 及 ElasticsearchTemplate 条数接口使用

Elasticsearch 笔记 Elasticsearch 笔记


es 除了获取匹配的文档具体信息外,也可以只获取匹配的文档条数(count),对此 elasticsearch 提供了单独的 count 接口,count 查询 api 指定的操作以 _count 收尾。

_count 示例

下面通过 kibana 给出示例:

GET qa/_count
{
  "query": {
    "multi_match": {
      "query": "elasticsearch",
      "fields": ["question","answer"]
    }
  }
}

返回数据结果如下:

{
  "count": 327,
  "_shards": {
    "total": 8,
    "successful": 8,
    "skipped": 0,
    "failed": 0
  }
}

_count 语法

GET /<target>/_count

count API 支持多个 target(即多个索引同时查询),多个索引用逗号隔开,同时 count 接口也支持通配符(*)。

查询参数(query parameters)

  • allow_no_indices

    (可选项,Boolean)顾名思义当查询的索引中是否允许有不存在的索引,默认是 true,如果设置为 false,则指定的索引中有不存在时,会报错。

  • analyzer

    (可选项,string)指定查询字符串的分析器。

    该参数只能在 q 指定查询字符串参数时使用。

  • analyze_wildcard

    (可选项,Boolean)如果 true,通配符和前缀查询会被分析。默认为 false

    该参数只能在 q 指定查询字符串参数时使用。

  • default_operator

    (可选项,string)查询字符串查询的默认运算符,可选 ANDOR,默认是 OR

    该参数只能在 q 指定查询字符串参数时使用。

  • df

    (可选项,string)默认使用的字段,其中查询字符串中没有给出字段前缀。

    该参数只能在 q 指定查询字符串参数时使用。

  • expand_wildcards

    (可选项,string)通配符模式可以匹配的索引类型。

    可选项有:

    • all

      匹配任何类型的索引,包括隐藏的。

    • open

      (默认值)匹配开放的、非隐藏的索引。

    • closed

      匹配封闭的、非隐藏的索引。

    • hidden

      匹配隐藏索引。必须与 openclosed 或两者一起结合使用。

    • none

      不接受通配符模式。

  • ignore_throttled

    (可选项,Boolean)如果 true,表示忽略具体、扩展或别名索引。默认为 true

  • ignore_unavailable

    (可选项,Boolean)如果 false,如果请求针对丢失或关闭的索引,则返回错误。默认为 false

  • lenient

    (可选项,Boolean)如果 true,查询字符串中基于格式的查询失败(例如,向数字字段提供文本)将被忽略。默认为 false

    该参数只能在 q 指定查询字符串参数时使用。

  • min_score

    (可选项,float)设置值表示文档的 _score 分数必须在指定值之上,即设置结果中 _score 的最小值。

  • preference

    (可选项,string)指定应在其上执行操作的节点或分片。默认是随机。

  • q

    (可选项,string)以 Lucene 查询字符串语法进行查询。

  • routing

    (可选项,string)用于将操作路由到特定分片的自定义值。

  • terminate_after

    (可选项,integer)为每个分片收集的最大文档数。如果查询达到此限制,Elasticsearch 会提前终止查询。Elasticsearch 在排序之前收集文档。

    应谨慎使用该参数。Elasticsearch 将此参数应用于处理请求的每个分片。如果可能,让 Elasticsearch 自动执行提前终止。避免针对多个索引的查询指定该参数。

请求正文(request body)

  • query

    (可选项,query 对象)使用查询 DSL 语句。

PUT /my-index-000001/_doc/1?refresh
{
  "user.id": "kimchy"
}

GET /my-index-000001/_count?q=user:kimchy

GET /my-index-000001/_count
{
  "query" : {
    "term" : { "user.id" : "kimchy" }
  }
}

ElasticsearchTemplate _count

如果项目中,使用 java spring-data-elasticsearch 的 ElasticsearchTemplate 操作 es,可以进行如下操作:

String[] count_match_field = new String[]{"question", "answer"};

MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders
        .multiMatchQuery(keyword, count_match_field)
        .minimumShouldMatch("100%");

SearchQuery searchQuery = new NativeSearchQueryBuilder()
        .withIndices(INDEX)
        .withQuery(multiMatchQueryBuilder)
        .build();

try {
    long count = elasticsearchTemplate.count(searchQuery);
    searchContext.getCommonSearchResultDTOWrapper().setTotal((int) count);
} catch (Throwable throwable) {
    log.error("qa count es error", throwable);
}
MongoDB 的 shell 操作获取指定集合的条数采用 db.collection.count() 命令。 ...
Elasticsearch连接支持2种协议,http协议和NativeElasticsearchbinaryprotocol(本地elast ...
es bool 查询是把任意多个简单查询组合在一起,使用 must、should、must_not、filter 选项来表示简单查询之间的逻 ...
Elasticsearch 查询语句采用基于 RESTful 风格的接口封装成 JSON 格式的对象,称之为 Query DSL。Elast ...
基于 elasticsearch 构建的业务中最常用的聚合查询就是 terms aggregation,它基于 term 粒度的词或数字值进 ...