草庐IT

ElasticSearch入门

社畜阿藏405 2024-01-18 原文

ElasticSearch

简介:选型原理

  • 除了搜索文本之外还需要他来处理分析查询
  • 需要分布式索引, 对于需要良好可伸缩性和以及性能分布式环境, Elasticsearch是更好的选择
  • 监控和指标, Elasticsearch暴露了更多的关键指标

文章目录

一. 基本概念(入门)

1. 环境准备

  • win启动方法

    • 首先去官网下载压缩包

    • 解压压缩包这里可以看到Jdk文件夹这是因为es是基于Java开发的的, 当然一般来说是使用我们自己的Java环境而不使用内置的

      这里注意如果使用的是本地环境的话8.0以后是需要JDK17版本的, 另外需要添加环境变量.

      官方文档:

      Java (JVM) Versionedit Elasticsearch is built using Java, and includes a bundled version of OpenJDK from the JDK maintainers (GPLv2+CE) within each distribution. The bundled JVM is the recommended JVM and is located within the jdk directory of the Elasticsearch home directory. To use your own version of Java, set the ES_JAVA_HOME environment variable. If you must use a version of Java that is different from the bundled JVM, we recommend using a supported LTS version of Java. Elasticsearch will refuse to start if a known-bad version of Java is used. The bundled JVM directory may be removed when using your own JVM.

      翻译(机器翻译):

      Java (JVM) Elasticsearch是使用Java构建的,并且在每个发行版中都包含了来自JDK维护者的OpenJDK捆绑版本(GPLv2+CE)。捆绑的JVM是推荐的JVM,位于Elasticsearch主目录的jdk目录中。要使用您自己的Java版本,请设置ES_JAVA_HOME环境变量。如果必须使用与捆绑的JVM不同的Java版本,我们建议使用受支持的LTS版本的Java。如果使用已知错误的Java版本,Elasticsearch将拒绝启动。当使用您自己的JVM时,捆绑的JVM目录可能会被删除。

    • 进入bin目录双击elasticsearch.bat文件

    • es启动

      其中注意9300端口为Elasticsearch集群间组件的通信端口, 9200端口为浏览器访问http协议Resful端口

    • 打开浏览器输入地址http://localhost:9200 ,测试结果

    • 启动问题解决方案

    ⭐ 熟悉目录

    bin 启动文件

    config 配置文件

    ​ log4j2 日志配置文件

    ​ Jvm.options java默认虚拟机相关设置, 如果修改需要创建jvm.options.d文件夹然后在内部创建option后缀的文件进行修改jvm配置

    ​ elasticsearch.yml elasticsearch的配置文件, 跨域配置

    lib 相关jar包

    moudles 功能模块

    plugins 插件

2. 核心概念

Elasticsearch是面向文档型数据库, 一条数据在这里就是一个文档. 为了方便理解和MySQL进行一下对比

2.1 Index(索引)

  • 一个索引就是拥有几分相似特征的文档的集合. 比如说, 你可以有一个客户数据的索引, 另一个产品目录的索引, 还有一个订单数据的索引. 一个索引由一个名字来表示(必须全部小写字母), 并且当我们要对这个索引中的文档进行索引, 搜索, 更新和删除的时候, 都要使用到这个名字, 在一个集群中, 可以定义任意多的索引
  • 能搜索的数据必须索引, 这样的好处是可以提高查询速度, 比如, 新华字典前面的目录就是索引的意思, 目录可以提高查询速度
  • Elasticsearch索引的精髓: 一切设计都是为了提高搜索的性能
  • 动词, 相当于MySQL中的insert
  • 名词, 相当于MySQL中的Database

2.2 Type(类型)7.x版及以上已经不再支持自定义索引类型(切记索引类型,默认类型为_doc)

  • 在一个索引中, 你可以定义一种或多种类型

  • 一个类型是你的索引的一个逻辑上的分类/ 分区, 其语义完全由你来定. 通常, 会为具有一组共同字段的文档定义一个类型. 不同的版本, 类型发生了不同的变化

  • 在index(索引)中, 可以定义一个或多个类型. 类似于MySQl中的Table, 每一种类型的数据放在一起

2.3 Document(文档)

  • 一个文档是一个可被索引的基础信息单元, 也就是一条数据
  • eg: 可以拥有某一个产品的文档, 某一个人的文档, 当然, 也可以拥有某个订单的一个文档. 文档以JSON(Javascript Object Notation)格式来表示, 而JSON是一个到处存在的互联网数据交互格式
  • 在一个index/type里面, 你可以存储任意多的文档
  • 保存在某个Index(索引)下, 某种类型(Type)的一个数据(Document), 文档是JSON格式的, Document就像是MySQL中的某个Table里面的内容

2.4 Fields(字段)

相当于数据库的字段, 对文档数据根据不同属性进行的分类标识

  • 相当于MySQL中的colum

2.5 Mapping(映射)

mapping是处理数据的方式和规则方面做一些限制, 如: 某个字段的数据类型, 默认值, 分析器, 是否被索引等等. 这些都是映射里面可以设置的, 其他就是处理ES里面数据的一些使用规则设置也叫映射, 按着最优规则处理数据对性能提高很大, 因此才需要建立映射, 并且需要思考如何建立映射才能对性能更好

2.6 Shards(分片)

  • 一个索引可以存储超过单个节点硬件限制的大量数据. 比如, 一个具有10亿文档数据的索引占据1TB磁盘空间, 而任一节点都可能没有这样大的磁盘空间. 或者单个节点处理搜做请求, 响应太慢. 为了解决这个问题Elasticsearch提供了将索引分成多份的能力, 每一份就称之为分片. 当你创建一个索引的时候, 你可以指定你想要的分片的数量. 每个分片本身也是一个功能完善并且独立的"索引", 这个"索引"可以被放置到集群中的任何节点上
  • 分片很重要, 主要有两方面的内容:
    • 允许你水平分割 / 扩展你的内容容量
    • 允许你在分片之上进行分布式的, 并行的操作, 进而提高性能 / 吞吐量
  • 至于一个分片怎么分布, 他的文档怎样聚合搜索请求, 是完全由Elasticsearch管理的, 对于作为用户的你来说, 这些都是透明的, 无需过分关心

2.7 Replicas(副本)

  • 在一个网络 / 云的环境里面, 失败随时都可能发生, 在某个分片 / 节点不知怎么的就处于离线状态, 或者由于任何原因消失了, 这种情况下, 有一个故障转移机制是非常有用的并且是强烈推荐的. 为此目的, Elasticsearch允许你创建分片的一份或者多份拷贝, 这些拷贝叫做复制分片(副本)
  • 复制分片之所以重要, 有两个重要原因
    • 在分片 / 节点失败的情况下, 提高了高可用性. 因为这个原因, 注意到复制分片从不与源 / 主要(original / primary)分片置于同一节点上是非常重要的
    • 扩展你的搜索量 / 吞吐量, 因为搜索可以在所有的副本上并行运行
  • 总之, 每个索引可以被分成多个分片. 一个索引也可以被复制0次(意思是没有复制)或多次. 一旦复制了, 每个索引就有了主分片(作为复制源头的原来的分片)和复制分片(主分片的拷贝)之别. 分片和复制的数量可以在索引创建的时候指定. 在索引创建之后, 你可以在任何时候动态的修改复制的数量, 但是你事后不能改变分片的数量. 默认情况下Elasticsearch中的每一个索引被分片一个主分片和一个复制, 这意味着, 如果你的集群中至少有两个节点, 你的索引将会有一个主分片和另外一个复制分片(一个完全拷贝), 这样的话每个索引总共就有两个分片, 我们需要根据索引需要确定分片个数

2.8 Allocation(分配)

将分片分配给某个节点的过程, 包括分配主分片或者副本. 如果是副本, 还包含从主分片复制数据的过程. 这个过程是有master节点完成的

⭐倒排索引

  • ES中因为索引方式, 导致Type的概念已经逐渐被弱化了, 在ES6.x中, 一个index下已经只能包含一个type, 在ES7.x中type的概念已经被删除了

3. 索引操作

3.1) 索引创建PUT{地址}/{索引}

默认一个索引分片是1副本是1, 如果需要设置分片数和副本数全局搜索单节点集群

  • 向ES服务器发送PUT请求(不能使用Post请求的原因是因为Post是非幂等性的)
    PUThttp://localhost:9200/azang

3.2) 索引查询删除GET{地址}/{索引} DELETE{地址}/{索引}

  • 查询索引相关信息使用Get请求GET{地址}/{索引}

    GEThttp://localhost:9200/azang

    • 结果集如下

      {
          "azang": {
              "aliases": {},
              "mappings": {},
              "settings": {
                  "index": {
                      "routing": {
                          "allocation": {
                              "include": {
                                  "_tier_preference": "data_content"
                              }
                          }
                      },
                      "number_of_shards": "1",
                      "provided_name": "azang",
                      "creation_date": "1661495314719",
                      "number_of_replicas": "1",
                      "uuid": "uKbq8YPySPiY9slo_ZPhEA",
                      "version": {
                          "created": "8040099"
                      }
                  }
              }
          }
      }
      
  • 删除索引相关信息使用Delete请求DELETE{地址}/{索引}

    DELETEhttp://localhost:9200/azang

    • 结果如下

      {
      
        "acknowledged": true
      
      }
      

3.3) 创建文档PSOT{地址}/{索引}/_doc``PSOT{地址}/{索引}/_doc/{id}

  • (具体参数要放到body里面json格式)-----非自定义_id-------Post请求

    不能使用Put请求因为会返回一个_id, 每一个_id都是不一样的, 且会作为唯一标识使用, 所以这里面要求非幂等性的

    POSThttp://localhost:9200/azang/_doc

    {
        "title": "wohenda",
        "category": "你忍一下",
        "image": "pron",
        "price": 66666.66
    }
    
    • 结果

      {
          "_index": "azang",
          "_id": "r5i-6IIBsEf_A_EJ_SHH",
          "_version": 1,
          "result": "created",
          "_shards": {
              "total": 2,
              "successful": 1,
              "failed": 0
          },
          "_seq_no": 0,
          "_primary_term": 1
      }
      
  • (具体参数要放到body里面json格式)-----自定义_id-------Post请求

    不能使用Put请求因为会返回一个_id, 每一个_id都是不一样的, 且会作为唯一标识使用, 所以这里面要求非幂等性的

    POSThttp://localhost:9200/azang/_doc/10086

    {
        "title": "olala",
        "category": "palala",
        "image": "xilala",
        "price": 66666
    }
    
    • 结果

      {
          "_index": "azang",
          "_id": "10086",
          "_version": 1,
          "result": "created",
          "_shards": {
              "total": 2,
              "successful": 1,
              "failed": 0
          },
          "_seq_no": 1,
          "_primary_term": 1
      }
      

3.4) 主键查询

  • 只搜索一条对应的-----Get请求PSOT{地址}/{索引}/_doc/{id}

    GEThttp://localhost:9200/azang/_doc/10086

    • 结果

      {
          "_index": "azang",
          "_id": "10086",
          "_version": 1,
          "_seq_no": 1,
          "_primary_term": 1,
          "found": true,
          "_source": {
              "title": "olala",
              "category": "palala",
              "image": "xilala",
              "price": 66666
          }
      }
      
  • 搜索全部-----Get请求GET{地址}/{索引}/_search

    GEThttp://localhost:9200/azang/_search

    • 结果

      {
          "took": 2,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 2,
                  "relation": "eq"
              },
              "max_score": 1,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "r5i-6IIBsEf_A_EJ_SHH",
                      "_score": 1,
                      "_source": {
                          "title": "wohenda",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 66666.66
                      }
                  },
                  {
                      "_index": "azang",
                      "_id": "10086",
                      "_score": 1,
                      "_source": {
                          "title": "olala",
                          "category": "palala",
                          "image": "xilala",
                          "price": 66666
                      }
                  }
              ]
          }
      }
      

3.5) 完全覆盖性修改 (幂等)PUT{地址}/{索引}/_doc/{id}

  • ----Put请求

    PUThttp://localhost:9200/azang/_doc/10086

    {
        "title": "olala",
        "category": "palala",
        "image": "xilala",
        "price": 66666
    }
    
    • 结果

      {
          "_index": "azang",
          "_id": "10086",
          "_version": 2,
          "result": "updated",
          "_shards": {
              "total": 2,
              "successful": 1,
              "failed": 0
          },
          "_seq_no": 2,
          "_primary_term": 1
      }
      

3.6) 局部性修改(非幂等 -> 因为局部更新每次都应该是不一样的)PSOT{地址}/{索引}/_update/{id}

  • ----POST请求{地址}/{索引}/_update/{id}

    POSThttp://localhost:9200/azang/_update/10086

    {
        "doc": {
            "title": "aaaaalala",
            "price": 1111
        }
    }
    
    • 结果

      {
          "_index": "azang",
          "_id": "10086",
          "_version": 3,
          "result": "updated",
          "_shards": {
              "total": 2,
              "successful": 1,
              "failed": 0
          },
          "_seq_no": 2,
          "_primary_term": 1
      }
      

3.7) 条件查询 GET{地址}/{索引}/_search?q={字段}:值 POST{地址}/{索引}/_search

  • GET请求http://localhost:9200/azang/_search?q=title:aaaaalala

    • 结果

      {
          "took": 1,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 1,
                  "relation": "eq"
              },
              "max_score": 0.2876821,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "10086",
                      "_score": 0.2876821,
                      "_source": {
                          "title": "aaaaalala",
                          "category": "aalala",
                          "image": "xilala",
                          "price": 1111
                      }
                  }
              ]
          }
      }
      
  • POST请求http://localhost:9200/azang/_search

    {
        "query": {
            "match": {
                "price": 1111
            }
        }
    }
    
    • 结果

      {
          "took": 2,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 1,
                  "relation": "eq"
              },
              "max_score": 1,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "10086",
                      "_score": 1,
                      "_source": {
                          "title": "aaaaalala",
                          "category": "aalala",
                          "image": "xilala",
                          "price": 1111
                      }
                  }
              ]
          }
      }
      
  • 查询全部 -> POST请求http://localhost:9200/azang/_search

    {
        "query": {
            "match_all": {}
        }
    }
    
    • 结果

      {
          "took": 1,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 1,
                  "relation": "eq"
              },
              "max_score": 1,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "10086",
                      "_score": 1,
                      "_source": {
                          "title": "aaaaalala",
                          "category": "aalala",
                          "image": "xilala",
                          "price": 1111
                      }
                  }
              ]
          }
      }
      
  • 分页查询 -> POST请求http://localhost:9200/azang/_search

    from表示起始位置, size表示查几个

    {
        "query": {
            "match_all": {}
        },
        "from": 0,
        "size": 2
    }
    
    • 结果

      {
          "took": 1,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 4,
                  "relation": "eq"
              },
              "max_score": 1,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "bIyCDYMB-29t2ccZqbwa",
                      "_score": 1,
                      "_source": {
                          "title": "wohenda",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 66666.66
                      }
                  },
                  {
                      "_index": "azang",
                      "_id": "bYyCDYMB-29t2ccZr7xl",
                      "_score": 1,
                      "_source": {
                          "title": "wohenda",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 66666.66
                      }
                  }
              ]
          }
      }
      
  • 限制字段操作查询 -> POST请求http://localhost:9200/azang/_search

    _source只查询对应的字段

    {
        "query": {
            "match_all": {}
        },
        "from": 1,
        "size": 2,
        "_source": [
            "title"
        ]
    }
    
    • 结果

      {
          "took": 2,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 4,
                  "relation": "eq"
              },
              "max_score": 1,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "bIyCDYMB-29t2ccZqbwa",
                      "_score": 1,
                      "_source": {
                          "title": "wohenda"
                      }
                  },
                  {
                      "_index": "azang",
                      "_id": "bYyCDYMB-29t2ccZr7xl",
                      "_score": 1,
                      "_source": {
                          "title": "wohenda"
                      }
                  }
              ]
          }
      }
      
  • 排序操作查询 -> POST请求http://localhost:9200/azang/_search

    sort排序

    {
        "query": {
            "match_all": {}
        },
        "from": 0,
        "size": 2,
        "_source": [
            "title"
        ],
        "sort": {
            "price": {
                "order": "desc"
            }
        }
    }
    
    • 结果

      {
          "took": 7,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 4,
                  "relation": "eq"
              },
              "max_score": null,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "bIyCDYMB-29t2ccZqbwa",
                      "_score": null,
                      "_source": {
                          "title": "wohenda"
                      },
                      "sort": [
                          66666.66
                      ]
                  },
                  {
                      "_index": "azang",
                      "_id": "bYyCDYMB-29t2ccZr7xl",
                      "_score": null,
                      "_source": {
                          "title": "wohenda"
                      },
                      "sort": [
                          66666.66
                      ]
                  }
              ]
          }
      }
      

3.8) 多条件查询(bool表示多条件) & 范围查询

  • must 约等于and 表示都满足

    GET请求http://localhost:9200/azang/_search

    {
        "query": {
            "bool": {
                "must": [
                    {
                        "match": {
                            "title": "wohendaaaaaaa'd'ga'd'ga'f'ga'g"
                        }
                    },
                    {
                        "match": {
                            "price": 6666670000077.66
                        }
                    }
                ]
            }
        }
    }
    
    • 结果

      {
          "took": 1,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 1,
                  "relation": "eq"
              },
              "max_score": 2.5404449,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "cYyTDYMB-29t2ccZ1LzF",
                      "_score": 2.5404449,
                      "_source": {
                          "title": "wohendaaaaaaa'd'ga'd'ga'f'ga'g",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 6666670000077.66
                      }
                  }
              ]
          }
      }
      
  • should 约等于or 表示或者

    GET请求http://localhost:9200/azang/_search

    {
        "query": {
            "bool": {
                "should": [
                    {
                        "match": {
                            "title": "wohendaaaaaaa'd'ga'd'ga'f'ga'g"
                        }
                    },
                    {
                        "match": {
                            "price": 6666677.66
                        }
                    }
                ]
            }
        }
    }
    
    • 结果

      {
          "took": 1,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 2,
                  "relation": "eq"
              },
              "max_score": 1.6739764,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "cYyTDYMB-29t2ccZ1LzF",
                      "_score": 1.6739764,
                      "_source": {
                          "title": "wohendaaaaaaa'd'ga'd'ga'f'ga'g",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 6666670000077.66
                      }
                  },
                  {
                      "_index": "azang",
                      "_id": "coyiDYMB-29t2ccZ1bxj",
                      "_score": 1,
                      "_source": {
                          "title": "wohendaaaaaaa'ga'f'ga'g",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 6666677.66
                      }
                  }
              ]
          }
      }
      
  • 范围查询 filter -> range -> gt(大于) -> lt(小于)

    GET请求http://localhost:9200/azang/_search

    {
        "query": {
            "bool": {
                "must": [
                    {
                        "match": {
                            "title": "wohendaaaaaaa'd'ga'd'ga'f'ga'g"
                        }
                    },
                    {
                        "match": {
                            "category": "你忍一下"
                        }
                    }
                ],
                "filter": {
                    "range": {
                        "price": {
                            "gt": 6666677.66
                        }
                    }
                }
            }
        }
    }
    
    • 结果

      {
          "took": 7,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 1,
                  "relation": "eq"
              },
              "max_score": 1.9321306,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "cYyTDYMB-29t2ccZ1LzF",
                      "_score": 1.9321306,
                      "_source": {
                          "title": "wohendaaaaaaa'd'ga'd'ga'f'ga'g",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 6666670000077.66
                      }
                  }
              ]
          }
      }
      
  • 模糊查询 match模糊查询 -> (具体是否可以进行需要根据映射关系)

    GET请求http://localhost:9200/azang/_search

    {
        "query": {
            "match": {
                "category": "上中"
            }
        }
    }
    
    • 结果

      {
          "took": 679,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 2,
                  "relation": "eq"
              },
              "max_score": 2.837029,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "dIyfEIMB-29t2ccZ8bzQ",
                      "_score": 2.837029,
                      "_source": {
                          "title": "wohendaaaaaaa'ga'f'ga'g",
                          "category": "你忍一下上中",
                          "image": "pron",
                          "price": 6666677.66
                      }
                  },
                  {
                      "_index": "azang",
                      "_id": "c4yfEIMB-29t2ccZzrwf",
                      "_score": 1.3042111,
                      "_source": {
                          "title": "wohendaaaaaaa'ga'f'ga'g",
                          "category": "你忍一下上",
                          "image": "pron",
                          "price": 6666677.66
                      }
                  }
              ]
          }
      }
      
  • 完全匹配 match_phrase

    GET请求http://localhost:9200/azang/_search

    {
        "query": {
            "match_phrase": {
                "category": "上中"
            }
        }
    }
    
    • 结果

      {
          "took": 1,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 1,
                  "relation": "eq"
              },
              "max_score": 2.837029,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "dIyfEIMB-29t2ccZ8bzQ",
                      "_score": 2.837029,
                      "_source": {
                          "title": "wohendaaaaaaa'ga'f'ga'g",
                          "category": "你忍一下上中",
                          "image": "pron",
                          "price": 6666677.66
                      }
                  }
              ]
          }
      }
      
  • 查询内容高亮显示

    GET请求http://localhost:9200/azang/_search

    {
        "query": {
            "match_phrase": {
                "category": "上中"
            }
        },
        "highlight": {
            "fields": {
                "categroy": {}
            }
        }
    }
    
    • 结果

      {
          "took": 3,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 1,
                  "relation": "eq"
              },
              "max_score": 2.837029,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "dIyfEIMB-29t2ccZ8bzQ",
                      "_score": 2.837029,
                      "_source": {
                          "title": "wohendaaaaaaa'ga'f'ga'g",
                          "category": "你忍一下上中",
                          "image": "pron",
                          "price": 6666677.66
                      }
                  }
              ]
          }
      }
      

3.9) 聚合操作 aggs

  • 分组

    GET请求http://localhost:9200/azang/_search

    {
        "aggs": { // 聚合操作
            "price_group": { // 名称
                "terms": { // 分组
                    "field": "price" // 分组字段
                }
            }
        }
    }
    
    • 结果

      {
          "took": 39,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 9,
                  "relation": "eq"
              },
              "max_score": 1,
              "hits": [
                  {
                      "_index": "azang",
                      "_id": "bIyCDYMB-29t2ccZqbwa",
                      "_score": 1,
                      "_source": {
                          "title": "wohenda",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 66666.66
                      }
                  },
                  {
                      "_index": "azang",
                      "_id": "bYyCDYMB-29t2ccZr7xl",
                      "_score": 1,
                      "_source": {
                          "title": "wohenda",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 66666.66
                      }
                  },
                  {
                      "_index": "azang",
                      "_id": "boyCDYMB-29t2ccZsrzl",
                      "_score": 1,
                      "_source": {
                          "title": "wohenda",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 66666.66
                      }
                  },
                  {
                      "_index": "azang",
                      "_id": "b4yCDYMB-29t2ccZvryX",
                      "_score": 1,
                      "_source": {
                          "title": "wohenda",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 66666.66
                      }
                  },
                  {
                      "_index": "azang",
                      "_id": "cIyTDYMB-29t2ccZqry7",
                      "_score": 1,
                      "_source": {
                          "title": "wohendaaaaaa",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 66666777.66
                      }
                  },
                  {
                      "_index": "azang",
                      "_id": "cYyTDYMB-29t2ccZ1LzF",
                      "_score": 1,
                      "_source": {
                          "title": "wohendaaaaaaa'd'ga'd'ga'f'ga'g",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 6666670000077.66
                      }
                  },
                  {
                      "_index": "azang",
                      "_id": "coyiDYMB-29t2ccZ1bxj",
                      "_score": 1,
                      "_source": {
                          "title": "wohendaaaaaaa'ga'f'ga'g",
                          "category": "你忍一下",
                          "image": "pron",
                          "price": 6666677.66
                      }
                  },
                  {
                      "_index": "azang",
                      "_id": "c4yfEIMB-29t2ccZzrwf",
                      "_score": 1,
                      "_source": {
                          "title": "wohendaaaaaaa'ga'f'ga'g",
                          "category": "你忍一下上",
                          "image": "pron",
                          "price": 6666677.66
                      }
                  },
                  {
                      "_index": "azang",
                      "_id": "dIyfEIMB-29t2ccZ8bzQ",
                      "_score": 1,
                      "_source": {
                          "title": "wohendaaaaaaa'ga'f'ga'g",
                          "category": "你忍一下上中",
                          "image": "pron",
                          "price": 6666677.66
                      }
                  }
              ]
          },
          "aggregations": {
              "price_group": {
                  "doc_count_error_upper_bound": 0,
                  "sum_other_doc_count": 0,
                  "buckets": [
                      {
                          "key": 66666.65625,
                          "doc_count": 4
                      },
                      {
                          "key": 6666677.5,
                          "doc_count": 3
                      },
                      {
                          "key": 66666776,
                          "doc_count": 1
                      },
                      {
                          "key": 6666670047232,
                          "doc_count": 1
                      }
                  ]
              }
          }
      }
      
  • 分组只显示聚合操作结果不显示详细信息

    GET请求http://localhost:9200/azang/_search

    {
        "aggs": { // 聚合操作
            "price_group": { // 名称
                "terms": { // 分组
                    "field": "price" // 分组字段
                }
            }
        },
        "size": 0 // 不显示具体详细信息
    }
    
    • 结果

      {
          "took": 8,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 9,
                  "relation": "eq"
              },
              "max_score": null,
              "hits": []
          },
          "aggregations": {
              "price_group": {
                  "doc_count_error_upper_bound": 0,
                  "sum_other_doc_count": 0,
                  "buckets": [
                      {
                          "key": 66666.65625,
                          "doc_count": 4
                      },
                      {
                          "key": 6666677.5,
                          "doc_count": 3
                      },
                      {
                          "key": 66666776,
                          "doc_count": 1
                      },
                      {
                          "key": 6666670047232,
                          "doc_count": 1
                      }
                  ]
              }
          }
      }
      
  • 平均值

    GET请求http://localhost:9200/azang/_search

    {
        "aggs": { // 聚合操作
            "price_avg": { // 名称
                "avg": { // 平均值
                    "field": "price" // 取平均字段
                }
            }
        },
        "size": 0
    }
    
    • 结果

      {
          "took": 2,
          "timed_out": false,
          "_shards": {
              "total": 1,
              "successful": 1,
              "skipped": 0,
              "failed": 0
          },
          "hits": {
              "total": {
                  "value": 9,
                  "relation": "eq"
              },
              "max_score": null,
              "hits": []
          },
          "aggregations": {
              "price_avg": {
                  "value": 740750775634.125
              }
          }
      }
      

3.10) 映射关系

  • 索引创建映射关系前提需要先创建索引

    PUT请求 http://localhost:9200/azangmapping/_mapping

    {
        "properties": {
            "name": {
                "type": "text", // 可分词
                "index": true // 可以被索引
            },
            "sex": {
                "type": "keyword", // 不可以被分词必须精准匹配
                "index": true // 可以被索引
            },
            "tel": {
                "type": "keyword", // 不可以被分词必须精准匹配
                "index": false // 不可以被索引
            }
        }
    }
    
    • 结果

      {
          "acknowledged": true
      }
      
  • 可以被分词就说明match是模糊查询的进行测试分别两个请求

    首先根据上面RESTFUL的请求确定了单个字段对于type是keyword的进行校验

    首先有两组可用数据分别是

    {
        "took": 1,
        "timed_out": false,
        "_shards": {
            "total": 1,
            "successful": 1,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": {
                "value": 2,
                "relation": "eq"
            },
            "max_score": 1,
            "hits": [
                {
                    "_index": "azangmapping",
                    "_id": "1001",
                    "_score": 1,
                    "_source": {
                        "name": "张三",
                        "sex": "男",
                        "tel": 123123123
                    }
                },
                {
                    "_index": "azangmapping",
                    "_id": "1002",
                    "_score": 1,
                    "_source": {
                        "name": "张三",
                        "sex": "男的",
                        "tel": 123123123
                    }
                }
            ]
        }
    }
    
    • POST请求 http://localhost:9200/azangmapping/_search

      {
          "query": {
              "match": {
                  "sex": "的" // sex是不可分词的所以结果应该是查不出来的
              }
          }
      }
      
      • 结果

        {
            "took": 1,
            "timed_out": false,
            "_shards": {
                "total": 1,
                "successful": 1,
                "skipped": 0,
                "failed": 0
            },
            "hits": {
                "total": {
                    "value": 0,
                    "relation": "eq"
                },
                "max_score": null,
                "hits": []
            }
        }
        
    • POST请求 http://localhost:9200/azangmapping/_search

      {
          "query": {
              "match": {
                  "name": "张" // name是分词的所以结果应该差的出来所有包含'张'的数据
              }
          }
      }
      
      • 结果

        {
            "took": 3,
            "timed_out": false,
            "_shards": {
                "total": 1,
                "successful": 1,
                "skipped": 0,
                "failed": 0
            },
            "hits": {
                "total": {
                    "value": 2,
                    "relation": "eq"
                },
                "max_score": 0.18232156,
                "hits": [
                    {
                        "_index": "azangmapping",
                        "_id": "1001",
                        "_score": 0.18232156,
                        "_source": {
                            "name": "张三",
                            "sex": "男",
                            "tel": 123123123
                        }
                    },
                    {
                        "_index": "azangmapping",
                        "_id": "1002",
                        "_score": 0.18232156,
                        "_source": {
                            "name": "张三",
                            "sex": "男的",
                            "tel": 123123123
                        }
                    }
                ]
            }
        }
        

有关ElasticSearch入门的更多相关文章

  1. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  2. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  3. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  4. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  5. ruby - Rails Elasticsearch 聚合 - 2

    不知何故,我似乎无法获得包含我的聚合的响应...使用curl它按预期工作:HBZUMB01$curl-XPOST"http://localhost:9200/contents/_search"-d'{"size":0,"aggs":{"sport_count":{"value_count":{"field":"dwid"}}}}'我收到回复:{"took":4,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":90,"max_score":0.0,"hits":[]},"a

  6. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  7. elasticsearch源码关于TransportSearchAction【阶段三】 - 2

    1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>

  8. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  9. Simulink方法总结和避坑指南(一)——Simulink入门与基本调试方法 - 2

    文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景  最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。  在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记

  10. ruby-on-rails - 使用 Rails (Tire) 和 ElasticSearch 进行模糊字符串匹配 - 2

    我有一个Rails应用程序,现在设置了ElasticSearch和Tiregem以在模型上进行搜索,我想知道我应该如何设置我的应用程序以对模型中的某些索引进行模糊字符串匹配。我将我的模型设置为索引标题、描述等内容,但我想对其中一些进行模糊字符串匹配,但我不确定在何处进行此操作。如果您想发表评论,我将在下面包含我的代码!谢谢!在Controller中:defsearch@resource=Resource.search(params[:q],:page=>(params[:page]||1),:per_page=>15,load:true)end在模型中:classResource'Us

随机推荐