es的理论理解(elasticsearch-2)

  1. 索引 index

    相当于数据库里的一个表,一个索引就是一个拥有相似特征的文档的集合;一个索引由一个名字来标识(必须全部是小写字母的)。

  2. 字段 field

    相当于是数据于是数据表的字段(列)

  3. 字段类型 type

    每一个字段都应该有一个对应的类型,例如:Text、Keyword、Long、Byte等

  4. 文档 document

    一个文档类似一条记录,文档以JSON格式来表示;

  5. ES的分词

    ES的默认分词设置的是standard,这个在进行中文分词时会单字拆分,不太友好;常用ik分词器,ik分词器有两种模式ik_smart和ik_max_word。ik_smart会将“清华大学”整个分为一个词;而ik_max_word会将“清华大学”分 为“清华大学”、“清华”和“大学”;常用ik_max_word;

  6. POST和PUT的区别

    • POST和PUT都可以进行文档的创建和更新操作;

    • 但是PUT操作文档需要确定文档具体的id,才能进行创建和更新操作;

    • 而POST不用,如果POST不写id,就会由ES生成一个唯一id进行创建新文档,如果填了id,则会针对这个id的文档进行创建更新;

    • PUT只会讲整个json数据替换,但POST只会更新相同字段的值;

    • PUT和DELETE都是幂等性操作,即不论操作多少次,结果都一样

  7. DSL分为query查询和filter过滤。query进行分词匹配不会缓存,查询慢;filter进行精确匹配,会进行缓存,查询快;

  8. 映射 mapping

    es中的映射(mapping)用来定义一个文档

    mapping是处理数据的方式和规则方面做一些限制,如某个

    字段的数据类型、默认值、分词器、是否被索引等等,这些

    都是映射里面设置的 。

    映射分为动态映射和静态映射

    • 动态映射:在文档写入elasticsearch时,会根据文档字段自动识别数据类型,这种机制称之为动态映射;

    • 静态映射:事先在elasticsearch中定义好映射,包含文档中各字段的类型等属性,这种方式称之为静态映射;

    映射解析

    PUT /es_db
    {
      "mappings": {
          "properties": {
            "name": {"type": "keyword", "index": true, "store": true},
            "sex": {"type": "integer", "index": true, "store": true},
            "age": {"type": "integer", "index": true, "store": true},
            "book": {"type": "text", "index": true, "store": true},
            "address": {"type": "text", "index":true, "store": true}
          }  
      }
    }
    
    • 上面字段的"index"属性设置为true,代表分词,false则表示不分词;设置为分词则在倒排索引里会有数据,反之则没有;(index设置为false的字段不能用来做条件查询)

    • 字段的"store"属性设置为true,则表示新增数据时,数据源里该字段会存值,如果为false,则数据源不会存该字段,该字段为空;

      (例如,搜索的时候需要用到该字段,但是展示信息的时候不需要他,则这个时候就可以将该字段的store设置为false)

    • 字段属性里的type表示字段的数据类型

      数据类型 数据
      date 日期
      boolean true或false
      long、integer、short、byte、double、float 数值类型
      date 日期
      text 字符串(可分词,不可排序、聚合)
      keyword 字符串(不可分词,可排序、聚合)

      keyword与text映射类型的区别

      keyword:只能精准查询,不能分词查询,能进行聚合查询,可以排序。

      text:能模糊查询,能分词查询,不能聚合查询,不能排序。

  9. es的乐观锁

    {
      "_index" : "es_db",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 1,
      "_seq_no" : 0,
      "_primary_term" : 1,
      "found" : true,
      "_source" : {
        "name" : "张三",
        "sex" : 1,
        "age" : 23,
        "address" : "广州天河公园"
      }
    }
    

    这是一个文档的数据,在es7之前是用"_version"字段来控制乐观锁,es7之后改用"_seq_no"字段来控制;

    _seq_no:文档版本号,作用同_version

    _primary_term:文档所在位置

    POST /es_db/_update/1/?if_seq_no=10&if_primary_term=1
    {
      "doc": {
        "address": "广州天河公园地铁站"
      }
    }
    
  10. 分片和副本

    es7之后默认只有1个主分片和1个副本分片;

    es7之前默认有5个主分片;

你可能感兴趣的:(#,ELK,elasticsearch,搜索引擎)