ElasticSearch 学习-笔记

Lucene 工做原理数据库

  • 处理文本的最高效作法就是:正则匹配。

ElasticSearch 中的基本概念json

  • 索引: 含有相同属性的文档集合。
  • 类型:索引能够定义一个或多个类型,文档必须属于一个类型。
  • 文档:文档是能够被索引的基本数据单元。
  • 分片:每一个索引都有多个分片,每一个分片是一个Lucene 索引。
  • 备份:拷贝一份分片就完成了分片的备份。

ElasticSearch API 命名风格app

  • API 基本格式: http://<ip>:<port>/<索引>/<类型>/<文档ID>
  • 经常使用的HTTP 动词:GET/PUT/POST/DELETE

关系型数据库和ElasticSearch 操做姿式对比less

ElasticSearch 基本操做3d

  • 建立索引
    • 方式一:建立非结构化的索引(以下图所示)。
    • 方式二:建立结构化的索引,输入book/novel/_mappings(以下图所示),
    • 方式三:能够在Postman 中选择PUT 方法,输入localhost:9200/people,而后在raw 中编辑一下json 信息(以下图):
    • 输入的json 内容以下:
      • {
                    "settings":{
                    "number_of_shards":3,
                            "number_of_replicas":1
                },
                    "mappings":{
                    "man":{
                        "properties":{
                            "name":{ "type":"text" },
                            "conutry":{ "type":"keyword" },
                            "age":{ "type":"integer" },
                            "date":{
                                "type":"date",
                                        "format":"yyyy-MM-dd HH:mm:ss ||yyyy-MM-dd||epoch_millis"
                            }
                        }
                    },
                    "woman":{}
                }
            }

         

  • 插入数据
    • 方式一:指定文档ID 插入,在Postman 中使用PUT 方法,输入localhost:9200/people/man/1,在raw 区域输入:
      • {
                "name":"Tom",
                    "country":"China",
                    "age":18,
                    "date":"2000-10-11"
            }

         

      • 执行结果:
    • 方式二:自动生成文档ID 插入,在Postman 中使用POST 方法,输入localhost:9200/people/man,在raw 区域输入:
      • {
                "name":"Tom老师",
                    "country":"China",
                    "age":88,
                    "date":"2000-10-11"
            }
      • 执行结果以下:
  • 修改文档
    • 方式一:直接修改文档,打开Postmain,选择POST 方法,输入localhost:9200/people/man/1/_update,运行结果以下:
    • 方式二:经过脚本修改文档,在raw 区输入如下内容:
      • 全部年龄增长一岁。
        • {
                  "script":{
                  "lang":"painless",
                          "inline":"ctx._source.age += 1",
                  }
              }

           

      • 或者输入:修改年龄为30 岁。
        • {
                      "script":{
                      "lang":"painless",
                              "inline":"ctx._source.age = params.age",
                              "params":{
                          "age":30
                      }
                  }
              }

           

  • 删除文档
    • 删除文档:打开Postman,选择DELETE 方法,输入localhost:9200/people/man/1,执行结果以下:
    • 删除索引,打开Postman 输入localhost:9200/people,执行结果以下:
  • 查询语法
    • 全表查询:在Postman 中选择GET 方法,输入localhost:9200/book/_search 获得如下结果:
    • 条件查询:在Postman 中选择GET 方法,输入localhost:9200/book/_search,而后在raw 区域中编辑以下内容:
      • 查询书籍中包含老师关键字,且按年龄降序排序。
      • {
                "query":{
                "match":{
                    "name":"老师"
                }
            },
                "sort":[
                   {"age":{"order":"desc"}}
                 ]
            }

         

    • 聚合查询:在Postman 中选择GET 方法,输入localhost:9200/book/_search,而后在raw 区域中编辑以下内容:
      • 根据国家和名称进行分组
    • 聚合统计:在Postman 中选择GET 方法,输入localhost:9200/book/_search,而后在raw 区域中编辑以下内容:
      • 根据年龄的字数进行聚合统计。
        • {
          	"aggs":{
          		"grades_age":{
          			"stats":{ "field":"age" }
          		}
          	}
          }

解决聚合分组没效果::code

  • people是index、man是类型、country是你须要设置的text字段    

ElasticSearch 高级查询orm

  • query 条件:
    • 方式一:模糊匹配,在Postman 中选择GET 方法,输入localhost:9200/people/_search,而后在raw 区域中编辑以下内容:
      • 注意这里的匹配,你随便输,他本身会切词
        • {
                  "query":{
                      "match":{
                          "name":"Tom小"
                      }
                  }
              }
    • 方式二:习语匹配查询name中包含”小小”
      • {
                "query":{
                    "match_phrase":{
                        "name":"小小"
                    }
                }
            }

         

    • 方式三:多字段匹配查询name和country中都包含”Tom”
      • {
                "query":{
                    "multi_match":{
                        "query":"Tom",
                                "fields":["name","country"]
                    }
                }
            }
    • 方式三:Query 语法查询查询name和country中同时包含XXX和YYY,或者包含ZZZ。
      • {
                "query":{
                    "query_string":{
                        "query":"(小 AND USA) OR china",
                                "fields":["name","country"]
                    }
                }
            }
    • 方式四:结构化数据查询
      • 查询字数在87到90之间的数据
        • {
                  "query":{
                      "range":{
                          "age":{
                              "gt":87,
                                      "lte":90
                          }
                      }
                  }
              }
    • 查询2000-10-12 至今 的数据
      • {
                "query":{
                    "range":{
                        "date":{
                            "gt":"2000-10-12",
                            "lte":"now"
                        }
                    }
                }
            }
    • filter 条件:
      • {
                "query":{
                    "bool":{
                        "filter":{
                            "term":{
                                "age":98
                            }
                        }
                    }
                }
            }
    • 复合查询
      • {
                "query":{
                    "bool":{
                        "must":[
                            {
                                "match":{
                                "name":"老师"
                                }
                            },
                            {
                                "match":{
                                "country":"China"
                                }
                            }
                        ],
                        "filter":{
                            "term":{
                                "age":88
                            }
                        }
                    }
                }
            }
相关文章
相关标签/搜索