目录

  • 初学ES
  • 只创建索引(表)
  • 1. 创建
  • 2.创建好后查看索引结构
  • 添加文档(数据)
  • 查看文档(数据)
  • 修改文档数据(数据update)
  • put方式修改
  • post方式修改
  • 删除文档&索引
  • 各种条件查询
  • 1.简单搜索(根据某个字段查询)
  • 模糊查找
  • 精确查找
  • 另外一种单字段查询方式
  • 2.复杂搜索
  • must与term区别
  • 多条件查询
  • must(And)
  • should(or)
  • must_not (!=)
  • 区间查询
  • 自定义字段返回
  • 排序
  • 高亮
  • 分页查询
  • 查看索引的相关信息

初学ES

把它当做数据库学习,比较容易理解

只创建索引(表)

1. 创建

(可以理解为创建数据库中的表)

java api查询es所有索引 kibana查询es所有索引_数据

PUT 索引名(表名)
{
  "mappings": {
    "properties": {
      "age"(字段名):{
        "type": "integer"(字段类型)
      },
      "title"(字段名):{
        "type": "text"(字段类型)
      }
    }
  }
}

2.创建好后查看索引结构

get 索引名

java api查询es所有索引 kibana查询es所有索引_字段_02

添加文档(数据)

如果索引不存在会先创建索引(表名)后创建(插入)文档(数据)

格式 :PUT 索引名(表名)/文档类型(类似于一个标识)/文档id(数据库表中的数据id)

PUT /db/_doc/1
{
  "age":20,
  "content":"内容:学习决定命运,细节决定成败",
  "name":"张三的名字",
  "title":"标题:学习决定命运,细节决定成"
}

执行后,相当于在db数据库创建了一个id为1的一条数据,可通过elasticsearch-head查看

java api查询es所有索引 kibana查询es所有索引_自定义_03

查看文档(数据)

GET 索引名/文档类型/文档id

GET /db/_doc/1

java api查询es所有索引 kibana查询es所有索引_字段_04

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

各种条件查询

为了方便演示,首先先添加几条数据

java api查询es所有索引 kibana查询es所有索引_字段_05

1.简单搜索(根据某个字段查询)

根据上面GET DB得知,name字段type=keyword,content的字段type=text

模糊查找

text:会被IK粉刺及拆分

发现content中包含“内容”的全部查出来了

GET /db/_doc/_search?q=content:内容

java api查询es所有索引 kibana查询es所有索引_数据_06

精确查找

keyword:不会被IK分词器拆分

发现只有完全匹配才可以查出来

java api查询es所有索引 kibana查询es所有索引_java api查询es所有索引_07

另外一种单字段查询方式

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":{} 定义要高亮的字段
    }
  }
}

结果如下:

java api查询es所有索引 kibana查询es所有索引_数据_08

分页查询

GET db/_doc/_search
{
  "query":{
    "match":{
      "content":"学习"
    }
  },
  "from":0, 当前第几页
  "size":2 每页显示几条数据
}

GET db/_doc/_count 获得指定条件下总条数有多少
{
  "query":{
    "match":{
      "content":"李四"
    }
  }
}

查看索引的相关信息

可以查出来每个索引使用的空间大小,记录数等信息

GET _cat/indices?v

java api查询es所有索引 kibana查询es所有索引_自定义_09