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类型只支持精准匹配
相关推荐
AORO202531 分钟前
遨游科普:三防平板是指哪三防?有哪些应用场景?
大数据·网络·5g·智能手机·电脑·信息与通信
橙色云-智橙协同研发1 小时前
【PLM实施专家宝典】离散制造企业ECO管理优化方案:构建自动化、零错误的变更引擎
大数据·云原生·解决方案·数字化转型·plm·eco·云plm
星光一影1 小时前
基于SpringBoot智慧社区系统/乡村振兴系统/大数据与人工智能平台
大数据·spring boot·后端·mysql·elasticsearch·vue
e6zzseo4 小时前
独立站的优势和劣势和运营技巧
大数据·人工智能
wudl55668 小时前
flink 1.20 物化表(Materialized Tables)
大数据·flink·linq
InfiSight智睿视界9 小时前
AI 技术助力汽车美容行业实现精细化运营管理
大数据·人工智能
熙客10 小时前
搜索引擎数据库介绍
搜索引擎
8K超高清11 小时前
高校巡展:中国传媒大学+河北传媒学院
大数据·运维·网络·人工智能·传媒
amhjdx11 小时前
政策东风下:卓玛儿童级健康腻子引领行业升级
大数据
TDengine (老段)11 小时前
TDengine 字符串函数 CONCAT_WS 用户手册
android·大数据·数据库·时序数据库·tdengine·涛思数据