当前位置: 首页 > news >正文

Elasticsearch查询上下文和_source

查询上下文

{"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中的查询字段,*表示查询所有数据,相当于:

get user/_search
{"query":{"match_all":{}}
}

禁用元数据

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

结果:hits中只包含id

{"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创建后不能修改。
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

结果:

{"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. 可使用通配符
get user/_search
{"_source": "owner.*","query":{"match_all": {}}
}

结果:

{"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
get user/_search
{"_source":{"includes":["name","owener.name"],"excludes":["age"]},"query":{"match_all": {}}
}

结果:

{"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
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类型只支持精准匹配
http://www.lryc.cn/news/392287.html

相关文章:

  • golang实现网卡流量监控
  • 技术分享:直播平台如何开发并接入美颜SDK
  • 左耳听风_114_113_Go编程模式修饰器
  • Java实习手册(小白也看得懂)
  • Elasticsearch 分析器(Analyzer)的作用和配置
  • SpringBoot(一)创建一个简单的SpringBoot工程
  • 简述Vue中的数据双向绑定原理
  • C++STL函数对象的应用
  • AJAX-day1:
  • 昆虫学(书籍学习资料)
  • springboot + mybatis 多数据源切换
  • windows电脑网络重置后wifi列表消失怎么办?
  • Python + 在线 + 文生音,音转文(中文文本转为英文语音,语音转为中文文本)
  • 哏号分治,CF103D - Time to Raid Cowavans
  • 基于深度学习的图像背景剔除
  • Python使用(...)连接字符串
  • 鸿蒙:1.入门
  • 【matlab】智能优化算法——求解目标函数
  • 不改代码,实现web.config或app.config的连接字符串加密解密
  • Python创建MySQL数据库
  • 【C++】unordered系列容器的封装
  • matlab 超越椭圆函数图像绘制
  • 本地文件同步上传到Gitee远程仓库
  • RESTful Web 服务详解
  • 【ARMv8/v9 GIC 系列 5.3 -- 系统寄存器对中断的处理】
  • MUNIK解读ISO26262--系统架构
  • STM32第十五课:LCD屏幕及应用
  • Java--继承
  • Github与本地仓库建立链接、Git命令(或使用Github桌面应用)
  • c++之旅第十一弹——顺序表