前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >12.Elasticsearch查询关键字3

12.Elasticsearch查询关键字3

作者头像
IT云清
发布2019-01-22 11:24:13
7810
发布2019-01-22 11:24:13
举报
文章被收录于专栏:IT云清
本文讲解验证查询

目录:

  • 1._validate
  • 2.explain
  • 3.rewrite

在使用正常查询时,如下:

代码语言:javascript
复制
GET people/user/_search?q=age:27

会返回查询结果

代码语言:javascript
复制
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 1,
    "hits": [
      {
        "_index": "people",
        "_type": "user",
        "_id": "4",
        "_score": 1,
        "_source": {
          "id": 4,
          "name": "jack ma",
          "age": 27,
          "address": "宁波",
          "interests": [
            "bastkeyball",
            "football"
          ],
          "create_time": "2018-02-04"
        }
      }
    ]
  }
}

1._validate

使用验证查询时:

代码语言:javascript
复制
GET user/_validate/query?q=create_time:aa

会返回:

代码语言:javascript
复制
{
  "valid": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  }
}

由此我们可以知道,验证查询的作用是:可以在不执行查询的前提下,先验证下这个查询语句是否合法。比如上面这个,create_time是个时间,时间是不能和aa类匹配的,所以,返回的valid标识为false。

2.explain

我们查询一下为什么不合法

代码语言:javascript
复制
GET user/_validate/query?q=create_time:aa&explain=true

解释结果如下:

代码语言:javascript
复制
{
  "valid": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "explanations": [
    {
      "index": "user",
      "valid": false,
      "error": """
[user/eQMgyyMyRaanpI83hH2jeA] QueryShardException[failed to create query: {
  "query_string" : {
    "query" : "create_time:aa",
    "fields" : [ ],
    "use_dis_max" : true,
    "tie_breaker" : 0.0,
    "default_operator" : "or",
    "auto_generate_phrase_queries" : false,
    "max_determinized_states" : 10000,
    "enable_position_increments" : true,
    "fuzziness" : "AUTO",
    "fuzzy_prefix_length" : 0,
    "fuzzy_max_expansions" : 50,
    "phrase_slop" : 0,
    "analyze_wildcard" : false,
    "escape" : false,
    "split_on_whitespace" : true,
    "boost" : 1.0
  }
}]; nested: ElasticsearchParseException[failed to parse date field [aa] with format [strict_date_optional_time||epoch_millis]]; nested: IllegalArgumentException[Parse failure at index [0] of [aa]];; ElasticsearchParseException[failed to parse date field [aa] with format [strict_date_optional_time||epoch_millis]]; nested: IllegalArgumentException[Parse failure at index [0] of [aa]];; java.lang.IllegalArgumentException: Parse failure at index [0] of [aa]
"""
    }
  ]
}

在explanations中,详细的告诉了我们为什么这个查询语句不合法。

而在合法的查询语句中,explain可以解释这个语句是如何操作的,便于我们了解如何执行这条语句。

代码语言:javascript
复制
GET user/_validate/query?explain=true
{
  "query": {
    "match": {
      "age": "27"
    }
  }
}

返回后:

代码语言:javascript
复制
{
  "valid": true,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "explanations": [
    {
      "index": "user",
      "valid": true,
      "explanation": "age:[27 TO 27]"
    }
  ]
}

3.rewrite

如果我们将重写rewrite设置为true,将更详细地显示将要执行的实际Lucene查询。

代码语言:javascript
复制
GET user/_validate/query?rewrite=true
{
  "query": {
    "match": {
      "create_time": "2014-02-15"
    }
  }
}

返回为:

代码语言:javascript
复制
{
  "valid": true,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "explanations": [
    {
      "index": "user",
      "valid": true,
      "explanation": "create_time:[1392422400000 TO 1392508799999]"
    }
  ]
}

下一篇:13.Elasticsearch查询语句4

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年05月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1._validate
  • 2.explain
  • 3.rewrite
  • 下一篇:13.Elasticsearch查询语句4
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档