ElasticSearch常用查询命令-kibana中使用
初学ES
把它当做数据库学习,比较容易理解
只创建索引(表)
1. 创建
(可以理解为创建数据库中的表)

PUT 索引名(表名)
{
  "mappings": {
    "properties": {
      "age"(字段名):{
        "type": "integer"(字段类型)
      },
      "title"(字段名):{
        "type": "text"(字段类型)
      }
    }
  }
}
2.创建好后查看索引结构
get 索引名

添加文档(数据)
如果索引不存在会先创建索引(表名)后创建(插入)文档(数据)
格式 :PUT 索引名(表名)/文档类型(类似于一个标识)/文档id(数据库表中的数据id)
PUT /db/_doc/1
{
  "age":20,
  "content":"内容:学习决定命运,细节决定成败",
  "name":"张三的名字",
  "title":"标题:学习决定命运,细节决定成"
}
执行后,相当于在db数据库创建了一个id为1的一条数据,可通过elasticsearch-head查看

查看文档(数据)
GET 索引名/文档类型/文档id
GET /db/_doc/1

version:版本号,从1开始记录,每次修改都会+1
_source:文档数据(可以理解为java返回的Model)
修改文档数据(数据update)
put方式修改
put /索引名/文档类型/文档Id
{
  "age":19,(修改的新值)
  "content":"1"(修改的新值)
}
注意:我原本数据中有name\title列,我执行的PUT操作没有写明name\title,执行后该文档就没有name\title字段了
post方式修改
POST /索引名/文档类型/文档Id/_update
{
    "name":"张三的名字叫李四"
}
推荐使用这种方式,这种方式可以想改哪些字段的值就改哪些,不改的无需再次传入,不会消失,更方便
删除文档&索引
删除索引:delete 索引名
删除文档:delete 索引名/文档类型/文档id
各种条件查询
为了方便演示,首先先添加几条数据

1.简单搜索(根据某个字段查询)
根据上面GET DB得知,name字段type=keyword,content的字段type=text
模糊查找
text:会被IK粉刺及拆分
发现content中包含“内容”的全部查出来了
GET /db/_doc/_search?q=content:内容

精确查找
keyword:不会被IK分词器拆分
发现只有完全匹配才可以查出来

另外一种单字段查询方式
GET db/_doc/_search
{
  "query":{
    "match":{
      "content":"学习"
    }
  }
}
2.复杂搜索
must与term区别
must是会进行模糊查询,term不会
例如一个content字段Type=text,使用must搜索关键字就可以搜出来,使用term就不行
多条件查询
must(And)
匹配年龄=20且内容包含“学习”的数据
GET db/_doc/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "content":"学习 是的" 匹配满足“学习”或“是的”的数据,多条件使用空格隔开
          }
        },
        {
           "match": {
            "age":20
          }
        }
      ]
    }
  }
}
should(or)
匹配content包含“王五”或者年龄为25的数据
GET db/_doc/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "content":"王五"
          }
        },
        {
           "match": {
            "age":25
          }
        }
      ]
    }
  }
}
must_not (!=)
匹配content不包含“王五”且年龄不为25的数据
GET db/_doc/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "content":"王五"
          }
        },
        {
           "match": {
            "age":25
          }
        }
      ]
    }
  }
}
区间查询
查询年龄≥20且≤25的数据
GET db/_doc/_search
{
  "query": {
    "bool": {
      "filter":{
        "range":{
          "age":{
            "gte":20,
            "lte":25
          }
        }
      }
    }
  }
}
gt 大于
gte 大于等于
lt 小于
lte 小于等于!
自定义字段返回
只返回age\name字段
GET db/_doc/_search
{
  "query": {
    "bool": {
      "filter":{
        "range":{
          "age":{
            "gte":20,
            "lte":25
          }
        }
      }
    }
  },
  "_source": ["age","name"]
  }
排序
按照年龄降序及分值降序排列,注意:如果没有查询条件,排序是没有_score分值的
GET db/_doc/_search
{
  "query":{
    "match":{
      "content":"学习 是的"
    }
  },
  "sort":[
      {
      "_score":{
        "order":"desc"
      },
      "age":{
        "order":"desc"
      }
    }
  ]
}
高亮
GET db/_doc/_search
{
  "query":{
    "match":{
      "content":"学习"
    }
  },
  "highlight":{
    "pre_tags":"<mytag style='color:blue'>",为查找的关键字添加自定义的html代码前缀
    "post_tags":"</mytag>",为查找的关键字添加自定义的html代码后缀
    "fields":{
      "content":{} 定义要高亮的字段
    }
  }
}
结果如下:

分页查询
GET db/_doc/_search
{
  "query":{
    "match":{
      "content":"学习"
    }
  },
  "from":0, 当前第几页
  "size":2 每页显示几条数据
}
GET db/_doc/_count 获得指定条件下总条数有多少
{
  "query":{
    "match":{
      "content":"李四"
    }
  }
}
查看索引的相关信息
可以查出来每个索引使用的空间大小,记录数等信息
GET _cat/indices?v

 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号