Elasticsearch|【ElasticSearch】ElasticSearch常用查询api集合(一)


文章目录

  • 前言
  • ?搜索所有文档
  • ?根据指定字段倒序排列
  • ?查询返回指定字段
  • ?范围查询(range)
  • ?前缀查询(prefix)
  • ?组合查询(bool)
  • ?高亮查询(term、highlight)
  • ? terms 查询
  • ?多字段查询(multi_match)

Elasticsearch|【ElasticSearch】ElasticSearch常用查询api集合(一)
文章图片

前言
  • 本文为es常见DSL搜索入门帖子
  • 开始之前先贴个对应关系,方便各位理解
  • 在es7+的版本中,是没有类型的概念的,所以,添加数据直接在索引中添加;
    Elasticsearch|【ElasticSearch】ElasticSearch常用查询api集合(一)
    文章图片
?请求es地址均为localhost:9200/{索引}/_search,为了编写方便些,在下面的例子中会直接写请求体;
?搜索所有文档
{ "query": { "match_all": {} }, "size": 1 // size关键词为返回数据条数,不填写默认为10条 }

?根据指定字段倒序排列
{ "query": { "match_all": {} }, "sort": [ { "patient_age": { "order": "desc" // 根据用户年龄倒序排列 } } ], "size": 10, // size 与 from搭配起到分页的作用 "from": 1 }

?查询返回指定字段
{ "query": { "match_all": {} }, "_source": ["bill_no", "patient_age"], // 只返回订单号和用户年龄 "sort": [ { "patient_age": { "order": "desc" } } ], "size": 10, "from": 1 }

?范围查询(range)
{ "query": { "range": { "patient_age": { // 查询年龄大于1岁 小于10岁的用户 "gte": 1, "lte": 10 } } } }

?前缀查询(prefix)
{ "query": { "prefix": { "patient_name": { "value": "李" // 查询姓李的用户 } } } }

?组合查询(bool)
  • bool 关键字: 用来组合多个条件实现复杂查询表达式
  • ? must: 相当于 &&
  • should: 相当于 ||
  • must_not: 相当于 !=
以下表达式的意思为:
  1. 查询用户年龄(patient_age)在0-18岁之间
  2. 且不姓李的用户信息
  3. 并且按照用户年龄字段倒序排列
  4. 并且返回指定字段的用户信息
{ "query": { "bool": { "must": [ { "range": { "patient_age": { "gte": 0, "lte": 18 } } } ], "must_not": [ { "prefix": { "patient_name": { "value": "李" } } } ] } }, "sort": [ { "patient_age": { "order": "desc" } } ], "_source": [ "bill_no", "patient_name", "patient_age" ] }

?高亮查询(term、highlight)
  • term 查询被用于精确值匹配,这些精确值可能是数字、时间、布尔或者那些 not_analyzed 的字符串;
{ "query": { "term": { "patient_name": { "value": "李" } } }, "highlight": { "fields": { "*": {} } } }

【Elasticsearch|【ElasticSearch】ElasticSearch常用查询api集合(一)】在返回值中,符合条件的数据会被highlight标签包裹,并且有标签修饰,不过这个标签是可以通过es进行修改的;
"highlight": { "patient_name": [ "雪" ] }

? terms 查询
  • terms 查询和 term 查询一样,但它允许你指定多值进行匹配;
  • 如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件
{ "query": { "terms": { "patient_name": [ // 查询患者名字中包含 赵 钱 孙字符的文档 "赵", "钱", "孙" ] } } }

?多字段查询(multi_match)
{ "query": { "multi_match": { "query": "山东", "fields": [ "patient_address", // 这里为检索的字段 "address" ] } } }

    推荐阅读