ES常用查询命令

一、基础配置查看

GET /_cluster/health
{
  "cluster_name" : "es-cluster",
  "status" : "green",   #集群状态,分为green、yellow和red
  "timed_out" : false,
  "number_of_nodes" : 2,  #集群的节点数
  "number_of_data_nodes" : 2,    #数据节点数
  "active_primary_shards" : 88,   #集群中所有活跃的主分片数。 
  "active_shards" : 116,    #集群中所有活跃的分片数。
  "relocating_shards" : 0,    #当前节点迁往其他节点的分片数量,通常为0,当有节点加入或者退出时该值会增加。
  "initializing_shards" : 0,    #正在初始化的分片。
  "unassigned_shards" : 0,    #未分配的分片数,通常为0,当有某个节点的副本分片丢失该值就会增加。
  "delayed_unassigned_shards" : 0,  
  "number_of_pending_tasks" : 0,    #是指主节点创建索引并分配shards等任务,如果该指标数值一直未减小代表集群存在不稳定因素
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0    #集群分片健康度,活跃分片数占总分片数比例。
}

二、常用数据操作

一、查看所有索引

GET _cat/indices

二、match查询

match关键字,相当于MySQL数据库中的like查询,match查询的字段如果是text类型,那么text会被分词,match就会匹配分词,查询所有包含分词的doc文档,

如果不是text类型的,那么就是精确查询。

  1. match条件查询
    GET 索引名称/_search
    {
      "query": {
        "match": {
          "查询字段": "查询值"
        }
      }
    }
  2. match_all查询所有数据,默认是10条,因为ES默认分页是10条数据,这个关键字不能写查询条件。
    GET 索引名称/_search
    {
      "query": {
        "match_all": {}
      }
    }
  3. match_phrase:匹配短语,match是会查询所有包含分词的doc文档,而match_phrase则是匹配整个短语,才会返回对应的doc文档。
  4. match_phrase_prefix:匹配短语的前缀部分,这个只能使用在text类型字段。

三、过滤字段

第一种:_source=false,表示所有字段都不返回。

第二种:_source: ["username", "age"],只返回指定的字段。

GET 索引名称/_search
{
  "query": {
    "match": {
      "查询字段": "查询值"
    }
  }
  , "_source": ["查询字段1","查询字段2","查询字段3"]
}

四、must布尔查询

条件查询中的【must】和mysql数据库中的【and】是相同作用,【must】接收一个数组,数组中的所有条件都成立,这个时候才会查询对应数据。

GET 索引名称/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "查询字段": ["查询值1","查询值2"]
          }
        }
      ] 
    }
  }, 
  "_source": ["查询字段1","查询字段2"]
}
GET 索引名称/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "查询字段": "查询值"
          },
          "match": {
            "查询字段": "查询值"
          }
        }
      ] 
    }
  }, 
  "_source": ["查询字段1","查询字段2"]
}

五、should布尔查询

既然有and运算,那当然少不了or运算,ES中使用【should】表示或运算,相当于mysql数据库中的【or】连接符。

GET 索引名称/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "查询字段": "查询值"
          },
          "match": {
            "查询字段": "查询值"
          }
        }
      ] 
    }
  }, 
  "_source": ["查询字段1","查询字段2"]
}

六、must_not布尔查询

must_not是非运算,相当于mysql数据库中的【!】非运算,即:【not】。

GET 索引名称/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "查询字段": "查询值"
          }
        }
      ] 
    }
  }, 
  "_source": ["查询字段1","查询字段2"]
}

七、filter过滤查询

filter是用于过滤查询的关键字,在filter里面可以使用多种查询条件,例如:range、term、terms、exists、ids几种常见的查询,

  1. range范围查询,范围查询首先需要指定范围,下面是几个常见的范围关键字。
  • gt:大于。
  • lt:小于。
  • gte:大于等于。
  • lte:小于等于。
  • eq:等于。
  • ne:不等于。
# 10<=查询字段<=20
GET 索引名称/_search { "query": { "bool": { "filter": [ { "range": { "查询字段": { "gte": 10, "lte": 20 } } } ] } } }

  2.exists是否存在

GET 索引名称/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "exists": {
            "查询字段":"字段值"
          }
        }
      ]
    }
  }
}

  3.ids过滤查询

  ids查询,这就相当于mysql数据库中的【in】条件查询,多个条件值查询,但是这里的只能够对

GET 索引名称/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "ids": {
            "values":["字段值1","字段值2"]
          }
        }
      ]
    }
  }
}

  4.term关键词查询

  term表示关键字查询,即:判断doc文档里面是否包含给定的term关键字,如果包含,则满足条件,否则不满足。

GET 索引名称/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "查询字段":"字段值"
          }
        }
      ]
    }
  }
}

  5.terms多关键词查询

  term每次只能够匹配一个关键字,而terms则允许多个关键字匹配。

GET 索引名称/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "查询字段":["字段值1","字段值2"]
          }
        }
      ]
    }
  }
}

 

posted @ 2024-07-25 15:01  曾经已是追忆  阅读(1863)  评论(0编辑  收藏  举报