Elasticsearch查询时还在百度DSL语句吗?你可能需要这份总结

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch查询时还在百度DSL语句吗?你可能需要这份总结

常用 es 查询盘点

熟悉了关系型数据库的结构概念以及查询,再去使用属于非关系型数据库的 Elasticsearch 时,简直是噩梦。第一道难关便是概念上的转换。索引?类型?文档?what?

下面是概念上的对应,大家可以类比了解

  1. Relational DB ->Databases->Tables->Rows     ->Columns
  2. Elasticsearch->Indices   ->Types  ->Documents->Fields

熟悉了各种概念后,下一道难关便是增删改查,而最最常用的是查询!如同 SQL 一样,它有一套自己的查询语句 - DSL 查询。所以,下面为大家总结一下常用的查询,然后你就可以像翻字典一样,用时瞄两眼了 ~ 嘿嘿,真他娘的是个天才 ...

1.基础的不能再基础查询

查询所有的索引及容量:

GET _cat/indices

GET 代表请求方式; _cat/indices 代表查询部分。访问的 url 写全为:

localhost:9200/_cat/indices

查询某一索引的映射结构:

GET 索引名/_mapping

查询所有的相同前缀索引:(如以 yan 开头)

GET yan*/_search

查询所有索引模板:

GET _template

查询具体索引模板:

GET _template/模板名

查询集群健康状态:

GET _cluster/health

查询所有节点:

GET _cat/nodes

查询索引及分片的分布:

GET _cat/shards

查询所有插件:

GET _cat/plugins

2.有点难度的查询

查询某个索引的全部数据:

GET /index/type/_search
{
  "query": {
    "match_all": {}
  }
}

当然你也可以直接写 URL 查询(默认返回 10 条文档):

localhost:9200/索引名/_search?pretty

pretty参数是为了浏览器显示的美观一些。

根据某一字段精确查询:

GET /index/type/_search
{
  "query": {
    "term": { "字段名" : "值" }
  }
}

根据某一字段模糊匹配:

GET /index/type/_search
{
  "query": {
    "match": { "字段名" : "值" }
  }
}

根据某一字段值进行范围查找:

GET /index/type/_search
{
  "query": {
    "range": {
        # 字段名: 条件
        "age":{ "gte" : 15 , "lte" : 25 }
    }
  }
}

gte 是大于等于;lte 是小于等于

根据条件进行过滤查询:

GET /index/type/_search
{
  "query": {
    "bool": {
      "filter": {
        "term":{"字段":"值"}
      }
    }
  }
}

多条件"或"关系:

GET /index/type/_search
{
    "query": {
        "bool": {
            "should": [{
                "term": {
                    "字段": "值"
                }
            }, {
                "match": {
                    "字段": "值"
                }
            }]
        }
    }
}

多条件"与"关系:

GET /index/type/_search
{
  "query": {
    "bool": {
      "must" : [{
        "match" : {
          "name" : "Ethanyan"
        }
      },{
        "range":{
        "age":{
          "from" : 18 , "to" : 26
        } 
        }
      }]
    }
  }
}

严格匹配:

GET /index/type/_search
{
  "query": {
    "bool": {
      "must" : {
        "range" : {
          "age" : { "from" : 18, "to" : 26 }
        }
      }
    }
  }
}

严格不匹配:

GET /index/type/_search
{
  "query": {
    "bool": {
      "must_not" : {
        "term" : {
          "name" : "Ethanyan"
        }
      }
    }
  }
}

复合查询:

GET /index/type/_search
{
    "query": {
        "bool": {
            "should": [{
                    "match": {
                        "age": 18
                    }
                },  
                {
                    "match": {
                        "age": 26
                    }
                }
            ],
            "filter": { 
                "match": {  
                    "name": "Ethanyan" 
                }
            }
        }
    }
}

3.注意事项

1.索引、模板之类的名称不能出现字母大写。

2.在查询时,要写 DSL 语句,所以需要携带请求体,那么为什么还是 get 请求?

答:原则上 get 请求不能携带请求体,但凡事有例外,试验后确实可以,我也不晓得为什么。下方为官方文档,全为 get 请求:




相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
4月前
|
存储 JSON 监控
大数据-167 ELK Elasticsearch 详细介绍 特点 分片 查询
大数据-167 ELK Elasticsearch 详细介绍 特点 分片 查询
78 4
|
5月前
|
JSON 自然语言处理 算法
ElasticSearch基础2——DSL查询文档,黑马旅游项目查询功能
DSL查询文档、RestClient查询文档、全文检索查询、精准查询、复合查询、地理坐标查询、分页、排序、高亮、黑马旅游案例
|
4月前
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
81 0
|
4月前
|
存储 自然语言处理 搜索推荐
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
68 0
|
6月前
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
197 1
|
6月前
|
存储 自然语言处理 Java
ElasticSearch 实现分词全文检索 - 经纬度定位商家距离查询
ElasticSearch 实现分词全文检索 - 经纬度定位商家距离查询
111 0
|
6月前
|
自然语言处理 Java
ElasticSearch 实现分词全文检索 - 高亮查询
ElasticSearch 实现分词全文检索 - 高亮查询
90 0
|
6月前
|
缓存 自然语言处理 Java
ElasticSearch 实现分词全文检索 - filter查询
ElasticSearch 实现分词全文检索 - filter查询
66 0
|
6月前
|
自然语言处理 Java
ElasticSearch 实现分词全文检索 - 复合查询
ElasticSearch 实现分词全文检索 - 复合查询
78 0
|
6月前
|
自然语言处理 Java 关系型数据库
ElasticSearch 实现分词全文检索 - id、ids、prefix、fuzzy、wildcard、range、regexp 查询
ElasticSearch 实现分词全文检索 - id、ids、prefix、fuzzy、wildcard、range、regexp 查询
159 0

热门文章

最新文章