2 elasticsearch 基本操作

内容概要

  1. 简单的集群管理
  2. 文档操作[增删改查]
  3. 多种查询

1.简单的集群管理

    1.1 快速检查集群的健康状况

es提供了一套api,叫做cat api,可以查看es中各种各样的数据
GET /_cat/health?v
在kibana 中的dev_tool 中,操作:
2 elasticsearch 基本操作

epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent

1526295953 19:05:53  elasticsearch yellow          1         1     32  32    0    0       31             0                  -                 50.8%


Ps:cluster 是集群名称,这里只有一个节点,是kibana内置的elasticsearch,active_shards_percent是活跃shard

如何快速了解集群的健康状况?green、yellow、red?
green:每个索引的primary shard和replica shard都是active状态的
yellow:每个索引的primary shard都是active状态的,但是部分replica shard不是active状态,处于不可用的状态
red:不是所有索引的primary shard都是active状态的,部分索引有数据丢失了

为什么现在会处于一个yellow状态?

我们现在就一个笔记本电脑,就启动了一个es进程,相当于就只有一个node。现在es中有一个index,就是kibana自己内置建立的index。由于默认的配置是给每个index分配5个primary shard和5个replica shard,而且primary shard和replica shard不能在同一台机器上(为了容错)。现在kibana自己建立的index是1个primary shard和1个replica shard。当前就一个node,所以只有1个primary shard被分配了和启动了,但是一个replica shard没有第二台机器去启动。

做一个小实验:此时只要启动第二个es进程,就会在es集群中有2个node,然后那1个replica shard就会自动分配过去,然后cluster status就会变成green状态。

 1.2快速查看集群中有哪些索引

 GET /_cat/indices?v  

health

status

index

uuid

pri

rep

docs.count

docs.deleted

store.size

pri.store.size

yellow

open

.kibana

rUm9n9wMRQCCrRDEhqneBg

1

1

1

0

3.1kb

3.1kb

PS:pri 指primary shard(分片)数量,rep 是指primary replica (副本)数量

1.3 简单的索引操作

    创建索引:PUT /zhang


2 elasticsearch 基本操作


GET /_cat/indices?v  


health

status

index

uuid

pri

rep

docs.count

docs.deleted

store.size

pri.store.size

yellow

open

zhang

mwmQWJVGS-CZ72_5iSVVvg

1

1

1

0

650b

650b

yellow

open

.kibana

rUm9n9wMRQCCrRDEhqneBg

1

1

1

0

3.1kb

3.1kb




删除索引:DELETE /zhang?pretty

GET /_cat/indices?v  

health

status

index

uuid

pri

rep

docs.count

docs.deleted

store.size

pri.store.size

yellow

open

.kibana

rUm9n9wMRQCCrRDEhqneBg

1

1

1

0

3.1kb

3.1kb


2. 文档操作

 2.1 新增文档模式:PUT /index/type/id

    {

         "json数据"

    }

  PUT /company/employee/7
    {
          "name":"C",
          "age":25,
          "department":"数据部",
          "about":[
              "sport",
              "eat",
              "sleep",
              "program"
            ]

    }

2 elasticsearch 基本操作

PS:这里”_shards” 中出现total 是 2,successful 为1 的情况是因为:默认正常情况下文档是要写入到primary shard和replica shard中,而我们这边replica节点不存在[replica 与 shard 不在同一个节点]。

2.2 查询文档

    查询指定id的文档

       模式: GET /index/type/id

      GET /company/employee/1

      2 elasticsearch 基本操作


查询该索引指定类型下的所有数据:

模式: GET /index/type/_search

 GET /company/employee/_search

  2 elasticsearch 基本操作

查询所有的数据:

GET /_search

 2 elasticsearch 基本操作


修改更新操作

    模式:POST /index/type/id        

      POST /company/employee/2
    {
        "name":"riche zhang",
        "age":22,
        "department":"业务研发一部",
        "about":["write","eat","sleep","program"]

    }


2 elasticsearch 基本操作

  2 elasticsearch 基本操作



替换操作:

POST /company/employee/2
{
  "name":"riche--this is a good name"  

}

2 elasticsearch 基本操作


2 elasticsearch 基本操作



只修改字段:

POST /index/type/id/_update

{

         “doc”:{

         “field”:value

    }

}



更新:

POST /company/employee/6/_update
{
  "doc":{
    "name":"zooter zhou"
  }

}

2 elasticsearch 基本操作


2 elasticsearch 基本操作


2 elasticsearch 基本操作

删除文档

DELETE  /index/type/id

DELETE /company/employee/6

2 elasticsearch 基本操作


2 elasticsearch 基本操作



3. 多种查询

    3.1 querystring search

   模式:GET /index/type/_search?q=filedName:value

  例如,查询在employee类型中about字段包含sport单词的所有文档 : GET /company/employee/_search?q=about:sport

 

  2 elasticsearch 基本操作


ps:

took:耗费了几毫秒

timed_out:是否超时,这里是没有

_shards:数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard(或者是它的某个replica shard也可以)

hits.total:查询结果的数量,这里是2个document

hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高

hits.hits:包含了匹配搜索的document的详细数据


3.2 query DSL

DSL:Domain SpecifiedLanguage,特定领域的语言

http request body:请求体,可以用json的格式来构建查询语法,比较方便,可以构建各种复杂的语法,比query string search肯定强大多了

查询所有:

GET /company/employee/_search
{
  "query": {
    "match_all": {}
  }

}

2 elasticsearch 基本操作



查看department 中包含"研发"的

GET /company/employee/_search
{
  "query": {
    "match": {
      "department": "研发"
    }
  }

}

2 elasticsearch 基本操作


在上面的查询结果上加个按age字段 asc  sort

GET /company/employee/_search
{
  "query": {
    "match": {
      "department": "研发"
    }
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ]

}


2 elasticsearch 基本操作

再加个分页

GET /company/employee/_search
{
  "query": {
    "match": {
      "department": "研发"
    }
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ],
  "from":1,
  "size":1

}

2 elasticsearch 基本操作


表示从第1页开始,取1条数据[默认索引是0]

指定要查询字段名

GET /company/employee/_search
{
  "query": {
    "match": {
      "department": "研发"
    }
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ],
  "from":1,
  "size":1,
  "_source": [
      "name",
      "age"
    ]

}

ps:上面的sort,_source及分页不是关联的,即大可不必一起写出来,我这样写只是为了图方便2 elasticsearch 基本操作

2 elasticsearch 基本操作


3.3 query filter

查询department中有部并且age 大于30的文档

GET /company/employee/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "department": "部"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gt":30
          }
        }
      }
    }
  }

}

2 elasticsearch 基本操作


2 elasticsearch 基本操作


3.4 full-text search(全文检索)

搜索department中有部门的文档

GET /company/employee/_search

{

  "query": {
    "match": {
      "department":"研发"
    }
  }

}


2 elasticsearch 基本操作

3.5 phrase search(短语搜索)

    跟全文检索相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回   

    phrasesearch,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回


全文搜索结果

  2 elasticsearch 基本操作

 

短语搜索

GET /company/employee/_search
{
  "query": {
    "match_phrase": {
      "department": "研二"
    }
  }

}


2 elasticsearch 基本操作

3.6 highlight search

GET /company/employee/_search
{
  "query": {
    "match": {
      "department": "研二"
    }
  },
  "highlight": {
    "fields": {
      "department":{}
    }
  }

}

2 elasticsearch 基本操作


ok,elasticsearch 的简单操作就先到此为止,后面会陆续更新elasticsearch 的高级搜索及其它高级功能!!!!

有问题,可以加我v信,一起学习交流es

2 elasticsearch 基本操作