Elasticsearch查询上下文和_source

查询上下文

json 复制代码
{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "user",
        "_id": "1",
        "_score": 1,
        "_source": {
          "name": "admin",
          "age": 18,
          "firends": [
            "小明",
            "小白",
            "小吕"
          ],
          "owner": {
            "name": "desc"
          }
        }
      }
    ]
  }
}
  1. took:查询时间,毫秒
  2. time_out:是否超时
  3. _shards:当前请求的分片
  4. total:分片数量
  5. successful:成功数量
  6. skipped:跳过数量
  7. failed:失败数量
  8. hits:查询结果
  9. total:
    1. value:查询结果条数
    2. relation:查询方式 如"eq"等于
    3. max_score:相关度评分
    4. hits:当前返回的结果
      1. _index:数据属于的索引
      2. _type:ES7.0后为_doc
      3. _id:当前数据id
      4. _score:当前数据相关度评分
      5. _source:元数据

相关度评分

在查询时候,如果不指定排序字段,默认使用相关度评分排序,评分度越高排名越靠前。

元数据

类似于mysql中的查询字段,*表示查询所有数据,相当于:

json 复制代码
get user/_search
{
  "query":{
    "match_all":{}
  }
}

禁用元数据

  1. 查询时候禁用元数据:
json 复制代码
get user/_search
{
  "_source":false,
  "query":{
    "match_all":{}
  }
}

结果:hits中只包含id

json 复制代码
{
  "took": 12,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "user",
        "_id": "1",
        "_score": 1
      }
    ]
  }
}
  1. 使用Mapping禁用元数据:通过includes指定要查询的字段,excludes指定不查询的字段,excludes优先级高于includes,不推荐使用,因为mapping创建后不能修改。
json 复制代码
put user2
{
  "mappings": {
    "_source": {
      "includes": [
        "name",
        "age"
      ],
      "excludes": [
        "firends",
        "owner"
      ]
    }
  }
}
put user2/_doc/1
{
  "name":"admin",
  "age":18,
  "firends":[
      "小明",
      "小白",
      "小吕"
    ],
  "owner":{
    "name":"desc"
  }
}
get user2/_search

结果:

json 复制代码
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "user2",
        "_id": "1",
        "_score": 1,
        "_source": {
          "name": "admin",
          "age": 18
        }
      }
    ]
  }
}

查询时候_source的使用

和Mysql中的select指定查询的字段作用一样

  1. 可使用通配符
json 复制代码
get user/_search
{
  "_source": "owner.*",
  "query":{
    "match_all": {}
  }
}

结果:

json 复制代码
{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "user",
        "_id": "1",
        "_score": 1,
        "_source": {
          "owner": {
            "name": "desc",
            "other": "other"
          }
        }
      }
    ]
  }
}
  1. 使用includes和excludes
json 复制代码
get user/_search
{
  "_source":
  {
    "includes":
    [
      "name",
      "owener.name"
    ],
    "excludes":
    [
      "age"
    ]
 
  },
  "query":{
    "match_all": {}
  }
}

结果:

json 复制代码
{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 1,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "user",
        "_id": "1",
        "_score": 1,
        "_source": {
          "name": "admin"
        }
      }
    ]
  }
}
  1. 禁用_source
json 复制代码
get user/_search
{
  "_source":false,
  "query":{
    "match_all":{}
  }
}

query_string查询

  1. 查询所有

get /user/_search

  1. 带参查询

get /user/_search?p=name:admin

  1. 分页查询

get /user/_search?from=0&size=2&sort=age:asc

  1. 精准匹配

get /user/_search?q=date=2024-06-29

  1. _all查询,在所有的有索引的字段中匹配

get /user/_search?q=2024-06-29

注意

  1. 第4种查询是精准匹配,只会匹配date字段
  2. 第5种查询是全文匹配,会匹配所有有索引的字段
  3. 如果执行 get /user/_searct?q=2024,则date类型的字段不会被检索,因为date类型只支持精准匹配
相关推荐
WoShop商城源码6 分钟前
短视频矩阵系统哪家好?全面解析与推荐
大数据·人工智能·其他·矩阵
倔强的石头1061 小时前
大数据时代下的时序数据库选型指南:基于工业场景的IoTDB技术优势与适用性研究
大数据·时序数据库·iotdb
火火PM打怪中5 小时前
产品经理如何绘制服务蓝图(Service Blueprint)
大数据·产品经理
Elastic 中国社区官方博客13 小时前
在 Windows 上使用 Docker 运行 Elastic Open Crawler
大数据·windows·爬虫·elasticsearch·搜索引擎·docker·容器
一切顺势而行14 小时前
Flink cdc 使用总结
大数据·flink
淦暴尼16 小时前
基于spark的二手房数据分析可视化系统
大数据·分布式·数据分析·spark
Ashlee_code17 小时前
裂变时刻:全球关税重构下的券商交易系统跃迁路线图(2025-2027)
java·大数据·数据结构·python·云原生·区块链·perl
Flink_China17 小时前
淘天AB实验分析平台Fluss落地实践:更适合实时OLAP的消息队列
大数据·flink
阿里云大数据AI技术18 小时前
云上AI推理平台全掌握 (4):大模型分发加速
大数据·人工智能·llm
Britz_Kevin19 小时前
从零开始的云计算生活——第三十三天,关山阻隔,ELK日志分析
elasticsearch·#elk·#logstash·#kibana