• elasticsearch常用接口和基本操作


    1、ES常用api接口

    2、ES的基本操作

    2.1 创建索引(数据库)

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

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

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

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

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

    {

        数据

    }

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

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

    POST /索引名称/_doc/1

    {

        数据

    }

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

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

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

    1. # 创建索引,不添加数据
    2. PUT /demo03
    3. {
    4. "mappings": {
    5. "properties": {
    6. "name":{
    7. "type": "text"
    8. },
    9. "age":{
    10. "type": "integer"
    11. }
    12. }
    13. }
    14. }

    2.2 删除索引(数据库)

    DELETE /索引名

    2.3 查询所有索引

    GET /_cat/indices?v

    2.4 查询索引结构

    GET /索引名称

    2.5 添加文档(记录)

    2.5.1 必须指定id的值

    1. # 添加文档,指定id
    2. PUT /demo01/student/2
    3. {
    4. "name":"王五",
    5. "age":22
    6. }

     2.5.2 不指定id

    1. # 添加文档,不指定id
    2. POST /demo01/student/
    3. {
    4. "name":"赵六",
    5. "age": 24
    6. }

    2.6 查询文档

    查询的提交方式必须为GET

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

    2.7 删除文档

    提交方式DELETE提交方式

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

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

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

    2.8 修改文档

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

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

    2.8.2 修改部分字段

    1. # 修改部分列
    2. POST /demo01/student/2/_update
    3. {
    4. "doc":{
    5. "name":"dumpling"
    6. }
    7. }

    3、根据条件查询

    3.1 查询所有文档

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

    3.2 根据条件搜索

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

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

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

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

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

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

    1. # 把查询条件封装成json数据
    2. GET /demo01/student/_search
    3. {
    4. "query": {
    5. "match": {
    6. "age":22
    7. }
    8. }
    9. }

    3.3.2 查询部分字段

    1. # 查询部分字段的值
    2. GET /user/_search
    3. {
    4. "query": {
    5. "match": {
    6. "age": "18"
    7. }
    8. },
    9. "_source": ["name","desc"]
    10. }

    3.3.3 分页查询

    1. # 分页查询
    2. GET /user/_search
    3. {
    4. "query": {
    5. "match": {
    6. "age": "18"
    7. }
    8. },
    9. "_source": ["name","age","desc"],
    10. "from": 1,
    11. "size": 2
    12. }

    3.3.4 范围查询

    1. # 范围查询
    2. GET /user/_search
    3. {
    4. "query": {
    5. "range": {
    6. "age":{
    7. "gt":16
    8. }
    9. }
    10. }
    11. }

    3.3.5 精准查询

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

    1. # 精准查询
    2. GET /user/_search
    3. {
    4. "query": {
    5. "term": {
    6. "age": {
    7. "value": 3
    8. }
    9. }
    10. }
    11. }

     3.3.6 排序

    1. # 排序
    2. GET /user/_search
    3. {
    4. "sort": [
    5. {
    6. "age": {
    7. "order": "desc"
    8. }
    9. }
    10. ]
    11. }

    3.4 多条件查询

    3.4.1 must等价于and

    1. # 多条件查询and
    2. GET /user/_search
    3. {
    4. "query": {
    5. "bool": {
    6. "must": [
    7. {
    8. "match": {
    9. "name": "马"
    10. }
    11. },
    12. {
    13. "match": {
    14. "age": "18"
    15. }
    16. }
    17. ]
    18. }
    19. }
    20. }

    3.4.2 should等价于or

    1. # 多条件查询or
    2. GET /user/_search
    3. {
    4. "query": {
    5. "bool": {
    6. "should": [
    7. {
    8. "match": {
    9. "name": "马"
    10. }
    11. },
    12. {
    13. "match": {
    14. "age": "18"
    15. }
    16. }
    17. ]
    18. }
    19. }
    20. }

    3.4.3 must-not等价于!=

    1. # 多条件查询!=
    2. GET /user/_search
    3. {
    4. "query": {
    5. "bool": {
    6. "must_not": [
    7. {
    8. "match": {
    9. "name": "马"
    10. }
    11. },
    12. {
    13. "match": {
    14. "age": "18"
    15. }
    16. }
    17. ]
    18. }
    19. }
    20. }

    3.5 高亮显示

    1. # 高亮显示
    2. GET /user/_search
    3. {
    4. "query": {
    5. "match": {
    6. "name": "马"
    7. }
    8. },
    9. "highlight": {
    10. "pre_tags": "",
    11. "post_tags": "",
    12. "fields": {
    13. "name": {}
    14. }
    15. }
    16. }

    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精准匹配:它不会对关键字进行拆字操作,并且把关键字作为一个整体和倒排索引表进行排序。

  • 相关阅读:
    ZCMU--1427: Tram(C语言)
    07-python条件语句
    node.js共享输液检测系统毕业设计源码131105
    CentOS 7 安装 MySQL8.0
    linux 搭建mycat
    中国财政科学研究院党委书记、院长刘尚希一行莅临麒麟信安调研
    【优化调度】基于改进遗传算法的公交车调度排班优化的研究与实现(Matlab代码实现)
    OAK-PoE系列M8接口使用说明
    HTTP响应状态码
    如何怎麼搭建高效的爬蟲全球代理IP池?
  • 原文地址:https://blog.csdn.net/Dumpling_skin/article/details/126347895