ES学习笔记

第一天

用PostMan URL:http://172.0.0.1:8080/shopping

PUT请求是具有幂等性的创建索引 而POST是不具有幂等性的创建索引 (什么是幂等性 就是两次请求一样 加入第一次创建成功了,第二次会告诉你已经存在了)

GET请求是获取索引 DELETE请求是删除索引

http://172.0.0.1:8080/_cat/indices?v 表示查询详细索引 (_cat表示查询)

POST http://172.0.0.1:8080/shopping/_doc 表示添加数据 (_doc表示索引中添加文档,添加数据就等于添加文档 ) 

POST http://172.0.0.1:8080/shopping/_doc/1001 表示自定义id (因为POST是不具有幂等性的,所以每次发送请求之后,会由ES自己随机生成一个id,也可以我们自己自定义一个id)

GET http://172.0.0.1:8080/shopping/_search 查询这个索引下的所有数据

完全覆盖(相当于具有幂等性的 可以用PUT请求)

POST http://172.0.0.1:8080/shopping/_update/1001 局部更新(相当于不具有幂等性 只能用POST请求)

GET http://172.0.0.1:8080/shopping/_search?q=category:小米 表示根据category=小米查询(一般有中文容易乱码 所以都是用请求体来查询)

{  

  "query":{

      "match_all":{

                                               (match_all代表全量查询)

            },

      "match_phrase":{

                                               (matchphrasel代表完全匹配)

            }

      },

  "highlight" : {

      "name" : {

                                                  (highlight代表高亮)

          }

      }

  "from" : 0,                                           (页码-1)*每页数据条数

  "size" : 2,                                                                                                                                                  (from 代表从第几页开始查 0代表第一页,size代表每页几条数据)

  "_source" : ["title"]                                      (_source 代表隐藏数据)

  "sort" : {

      ""price : {

         "order" : "desc"                                (根据价格进行降序) 

       }

      }

}

 

第二天

1.关于分片与复制

每个索引可以分成多个分片,每个索引也可以复制0次或者多次,如果复制了多次,复制的分片不可以跟原分片在同一节点上,用来提高性能,复制和分片的数量可以创建索引的时候指定,创建完索引之后,只能动态的改变复制的数量不能改变分片的数量

2.query和filter的区别

Query context 查询上下文 这种语句在执行时既要计算文档是否匹配,还要计算文档相对于其他文档的匹配度有多高,匹配度越高,_score 分数就越高

Filter context 过滤上下文 过滤上下文中的语句在执行时只关心文档是否和查询匹配,不会计算匹配度,也就是得分

执行全文检索或者查询结果依赖相关度分值时需要用query,但是执行精确值查询或者查询结果只有yes或者no,这时需要用filter。并且filter查询速度较快,并会进行缓存,后面可以提升查询速度,而query因为要计算相关度分值,所以是重量级查询,并且不会进行缓存

3.keyword和match_phrase的区别

文档字段属性如果是一个keyword类型,那就需要完全匹配才能命中。好比这个字段值是12345,那么你不论是1234还是123456都不会命中。

如果是match_phrase,那就是真正的包含关系。好比这个字段值是12345,那么你是1234就会命中,而123456不会命中。因为12345包含1234而不包含123456。

4.为什么filter过滤快

楷文:
filter查询快,一个原因是因为不需要评分,其次就是filter采用的数据结构 bit set,filter的缓存实际上就是bitset的缓存,filter在使用bitset的过程中:会先从稀疏bitset开始过滤,filter过滤采用的数据结构

 

分片控制:用户可以访问任一节点获取数据,这个节点就是协调节点,假如它的负载比较大,它会轮询来把请求发给合适的节点

 路由计算:hash(id)%主分片数量

posted @ 2021-11-15 23:58  最强Java代表  阅读(48)  评论(0)    收藏  举报