zoukankan      html  css  js  c++  java
  • 和我一起打造个简单搜索之ElasticSearch入门

    本文简单介绍了使用 Rest 接口,对 es 进行操作,更深入的学习,可以参考文末部分。

    环境

    本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch ,这个版本比较稳定,可以用于生产环境。

    系列文章

    基础概念

    索引--相当于数据库
    类型--相当于表
    文档--相当于一条记录
    分片--对索引进行分片,分布于集群各个节点上,降低单个节点的压力
    备份--拷贝分片就完成了备份


    基本语法

    索引

    索引类型

    • 结构化索引
      • 特点:通过接口创建,可以指定 mappings
      • url:port/索引名/类型名/_mappings
    • 非结构化索引
      • 特点:通过 elasticsearch head 创建 mapping 为空

    使用 RestClient/PostMan 创建结构化索引

    创建一个 people 的索引,包含一个类型 man

    {
        "settings":{
            "number_of_shards":3,
            "number_of_replicas":1
        },
        "mappings":{
            "man":{
                "properties":{
                    "name":{
                        "type":"text"
                    },
                    "country":{
                        "type":"keyword"
                    },
                    "age":{
                        "type":"integer"
                    },
                    "date":{
                        "type":"date",
                        "format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
                    }
                }
            }
        }
    }
    

    keyword 与 text 的区别

    type 类型为 keyword 的时候,ES 不会对其进行分词,而 text 会被分词

    es 通过 rest 接口对数据操作

    插入数据

    1. 指定文档 id 插入
      1. PUT 请求: ip:port/索引/类型/id
    2. 自动产生文档 id 插入
      1. POST 请求: ip:port/索引/类型

    修改数据

    1. 直接修改
      2. POST 请求: ip:port/索引/类型/id/_update

    删除数据/删除索引

    1. 删除文档
      1. DELETE 请求 ip:端口/索引/类型/id
    2. 删除索引
      1. DELETE 请求 ip:端口/索引

    查询数据

    1. 简单查询
      2. GET 请求: ip:端口/索引/类型/id
    2. 条件查询
      1. POST请求: ip:端口/索引/_search
      2. 指定条件查询,分页与排序
        {
            "query":{
                "match":{
                    "name":"WeJan"
                }
            },
            "sort":[
                {
                    "age":{
                        "order":"asc"
                    }
                }
            ],
            "from" : 0,
            "size" : 10
        }
        
    3. 聚合查询
      1. POST请求: ip:端口/索引/_search
      2. 分组,可以多个分组
        {
            "aggs":{
                "group_by_age":{
                    "terms":{
                        "field":"age"
                    }
                }
            }
        }
        
      3. 聚合计算
        {
            "aggs":{
                "age_count":{
                    "stats":{
                        "field":"age"
                    }
                }
            }
        }
        
        • sum
        • avg
        • max
        • min
        • count

    高级查询

    1. 习语匹配(全词匹配)

      {
          "query":{
              "match_phrase":{
                  "name":"WeJan"
              }
          }
      }
      
    2. 多字段匹配,多个字段包含query

      {
          "query":{
              "multi_match":{
                  "query":"WeJan",
                  "fields":["author", "title"]
              }
          }
      }
      
    3. query_string 文本查询

      {
          "query":{
              "query_string":{
                  "name":"(WeJan AND Jan) OR 哈哈"
              }
          }
      }
      
    4. 针对多个字段的文本查询

      {
          "query":{
              "query_string":{
                  "name":"WeJan OR 哈哈",
                   "fields":["author", "title"]
              }
          }
      }
      
    5. 字段查询,比如年龄,分类

      {
          "query":{
              "term":{
                 "age":25
              }
          }
      }
      
    6. 范围查询,可以对时间字段进行查询,现在使用 "now"替代

      {
          "query":{
              "range":{
                "age":{
                  "gte":26,
                  "lte":36
                }
              }
          }
      }
      

    参考

  • 相关阅读:
    构建之法阅读笔记05
    构建之法阅读笔记04
    构建之法阅读笔记03
    第九周学习进度条
    个人冲刺
    第八周进度条
    Git疑难解决
    Git常用命令
    git配置SSH公钥
    Laravel框架中如何使用 Presenter 模式?
  • 原文地址:https://www.cnblogs.com/vcmq/p/9966668.html
Copyright © 2011-2022 走看看