elasticsearch常用接口和基本操作

1、ES常用api接口

2、ES的基本操作

2.1 创建索引(数据库)

创建索引并往索引中的指定id添加一条文档

PUT /索引名称/类型名称/id
{
   数据
}

# 创建索引并向索引中student类型添加一条文档
# name字段  id=1
PUT /demo01/student/1
{
  "name":"张三",
  "age":21
}

创建索引并往索引中添加一条文档,不指定id

POST /索引名称/类型名称/

{

    数据

}

# 创建索引不指定id添加一条文档,请求方式必须为post
POST /demo01/student/
{
  "name":"李四",
  "age":23
}

创建索引省略类型,向默认类型中添加一条记录

POST /索引名称/_doc/1

{

    数据

}

# 创建索引省略类型则默认为_doc类型,
# 从7.xx之后一个索引只用一个类型
PUT /demo02/_doc/1
{
  "name":"王五",
  "age":22
}

注意:一个索引中只能有一个类型,如果定义了类型在使用默认类型仍然是自己定义的类型。

创建索引,但是不添加数据。
PUT /索引名/类型(类型可省略)
PUT /demo03
{
  "mappings": {
    "properties": {
      "name":{
        "type": "text"
      },
      "age":{
        "type": "integer"
      }
    }
  }
}

# 创建索引,不添加数据
PUT /demo03
{
  "mappings": {
    "properties": {
      "name":{
        "type": "text"
      },
      "age":{
        "type": "integer"
      }
    }
  }
}

2.2 删除索引(数据库)

DELETE /索引名

2.3 查询所有索引

GET /_cat/indices?v

2.4 查询索引结构

GET /索引名称

2.5 添加文档(记录)

2.5.1 必须指定id的值

# 添加文档,指定id
PUT /demo01/student/2
{
  "name":"王五",
  "age":22
}

 2.5.2 不指定id

# 添加文档,不指定id
POST /demo01/student/
{
  "name":"赵六",
  "age": 24
}

2.6 查询文档

查询的提交方式必须为GET

# 查询索引的指定id的文档
GET /demo01/student/1

2.7 删除文档

提交方式DELETE提交方式

根据不同的操作具有不同的提交方式restful风格

GET查询, PUT修改, POST添加操作, DELETE删除操作

# 删除索引的指定id的文档
DELETE /demo01/student/VaCAoIIBvLF8NezjQ3B6

2.8 修改文档

2.8.1 指定所有字段,如果只指定部分字段,其他字段会消失

# 修改,这种修改会丢失没有申明的字段,
# 如果不丢失字段,必须声明所有的字段
PUT /demo01/student/1
{
  "name": "dempling"
}

2.8.2 修改部分字段

# 修改部分列
POST /demo01/student/2/_update
{
  "doc":{
    "name":"dumpling"
  }
}

3、根据条件查询

3.1 查询所有文档

# 查询所有文档
GET /demo01/student/_search

3.2 根据条件搜索

GET /索引名称/类型名称/_search?q=字段名:值

这种方式想当于模糊查询,只要是name属性值中包含这个值就可以查到,不过这里name的属性需要为text类型,text类型会进行分词操作,所以有模糊查询的效果,分词查询在文档末尾会进行介绍。

# 根据条件查询文档
GET /demo01/student/_search?q=name:dumpling

3.3 把查询条件封装成json数据

3.3.1 匹配查询,查询所有字段

match会对查询关键词进行分词操作。

# 把查询条件封装成json数据
GET /demo01/student/_search
{
  "query": {
    "match": {
      "age":22
    }
  }
}

3.3.2 查询部分字段

# 查询部分字段的值
GET /user/_search
{
  "query": {
    "match": {
      "age": "18"
    }
  },
  "_source": ["name","desc"]
}

3.3.3 分页查询

# 分页查询
GET /user/_search
{
  "query": {
    "match": {
      "age": "18"
    }
  },
  "_source": ["name","age","desc"],
  "from": 1,
  "size": 2
}

3.3.4 范围查询

# 范围查询
GET /user/_search
{
  "query": {
    "range": {
      "age":{
        "gt":16
      }
    }
  }
}

3.3.5 精准查询

term不会对查询关键字进行分词操作。

# 精准查询
GET /user/_search
{
  "query": {
    "term": {
      "age": {
        "value": 3
      }
    }
  }
}

 3.3.6 排序

# 排序
GET /user/_search
{
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

3.4 多条件查询

3.4.1 must等价于and

# 多条件查询and
GET /user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "马"
          }
        },
        {
          "match": {
            "age": "18"
          }
        }
      ]
    }
  }
}

3.4.2 should等价于or

# 多条件查询or
GET /user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "马"
          }
        },
        {
          "match": {
            "age": "18"
          }
        }
      ]
    }
  }
}

3.4.3 must-not等价于!=

# 多条件查询!=
GET /user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "name": "马"
          }
        },
        {
          "match": {
            "age": "18"
          }
        }
      ]
    }
  }
}

3.5 高亮显示

# 高亮显示
GET /user/_search
{
  "query": {
    "match": {
      "name": "马"
    }
  },
  "highlight": {
    "pre_tags": "<font color='red'>",
    "post_tags": "</font>",
    "fields": {
      "name": {}
    }
  }
}

4、分词搜索

4.1 什么是分词?

IK分词器: 中文分词器
分词:即把一段中文或者别的划分成一个个的关键字, 我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一-个匹配操作, 默认的中文分词是将每个字看成一个词(不使用用IK分词器的情况下),比如“我爱饺子皮”会被分为"我”,”爱", ”饺”, "子”,"皮"这显然是不符合要求的,所以我们需要安装中文分词器ik来解决这个问题。
IK提供了两个分词算法: ik_ smart和i_ max_ word ,其中ik_ smart 为最少切分,ik_ max_ word为最细粒度划分!

 

text(standard)和keyword类型的区别:

text类型会为该字段的内容进行拆词操作,并放入倒排索引表中,

keyword类型不会进行拆词操作。

match和term的区别:

使用match匹配查询:对匹配的关键字进行拆字操作,并和倒排索引表中对应。

使用term精准匹配:它不会对关键字进行拆字操作,并且把关键字作为一个整体和倒排索引表进行排序。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值