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类型只支持精准匹配
相关推荐
WLJT1231231233 分钟前
守护自然与滋养民生的绿色之路
大数据·安全
min18112345616 分钟前
PC端零基础跨职能流程图制作教程
大数据·人工智能·信息可视化·架构·流程图
静听松涛13334 分钟前
中文PC端多人协作泳道图制作平台
大数据·论文阅读·人工智能·搜索引擎·架构·流程图·软件工程
黄焖鸡能干四碗1 小时前
智能制造工业大数据应用及探索方案(PPT文件)
大数据·运维·人工智能·制造·需求分析
世岩清上1 小时前
乡村振兴主题展厅本土化材料运用与地域文化施工表达
大数据·人工智能·乡村振兴·展厅
说私域2 小时前
短视频私域流量池的变现路径创新:基于AI智能名片链动2+1模式S2B2C商城小程序的实践研究
大数据·人工智能·小程序
MM_MS2 小时前
Halcon图像锐化和图像增强、窗口的相关算子
大数据·图像处理·人工智能·opencv·算法·计算机视觉·视觉检测
焦耳热科技前沿3 小时前
中科大EMA:3秒焦耳热一步合成双功能催化剂用于甲醇氧化协同高效制氢
大数据·人工智能·自动化·能源·材料工程
向量引擎小橙3 小时前
推理革命与能耗:AI大模型应用落地的“冰山成本”与破局之路
大数据·人工智能·深度学习·集成学习
一条咸鱼_SaltyFish3 小时前
[Day15] 若依框架二次开发改造记录:定制化之旅 contract-security-ruoyi
java·大数据·经验分享·分布式·微服务·架构·ai编程