zoukankan      html  css  js  c++  java
  • elasticsearch版本控制及mapping映射属性介绍

           学习elasticsearch不仅只会操作,基本的运行原理我们还是需要进行了解,以下内容我讲对elasticsearch中的基本知识原理进行梳理,希望对大家有所帮助!

    一、ES版本控制

    1.Elasticsearch采用了乐观锁来保证数据的一致性,也就是说,当用户对document进行操作时,并不需要对该document做加锁和解锁的操作,只需要指定要操作的版本即可。当版本号一致时,elasticsearch会允许该操作顺利执行,而当版本号存在冲突时,elasticsearch会提示冲突并抛出异常(versionConfilctEngineException异常)。

    2.Elasticsearch的版本号取值范围为12^63-1.

    1、内部版本控制:

    (1)使用的是_version 版本号要与文档的版本号一致

     

    3.外部版本控制:elasticsearch在处理外部版本号时会对内部版本号的处理有些不同。他不在是检查_version是否与请求中指定的数值相同,而是检查当前的_version是否比指定的数值小。如果请求成功,那么外部的版本号就会被存储到文档中的_version中。

    4.为保持_version与外部版本控制的数据一致,使用version_type=external

     

    二、ESmapping

    1、核心数据类型(以下的数据类型与java的数据类型类似)

    (1)字符型

    ①Text:被用来索引长文本,在建立索引前会将这项文本进行分词,转化为词的组合,建立索引。允许ES来检索这些词语。Text类型不能用来排序聚合

    ②Keyword:不需要进行分词,可以被用来检索过滤、排序和聚合。Keyword类型字段只能用本身来进行检索

    (2)数字类型

    ①byte,short,integer,Long,double,float

    (3)日期类型:date

    (4)二进制类型:binary

    2Maping 支持的属性

    "type" : "text", #是数据类型一般文本使用text(可分词进行模糊查询)keyword无法被分词(不需要执行分词器),用于精确查找

        "analyzer" : "ik_max_word", #指定分词器,一般使用最大分词:ik_max_word

        "normalizer" : "normalizer_name", #字段标准化规则;如把所有字符转为小写;具体如下举例

        "boost" : 1.5, #字段权重;用于查询时评分,关键字段的权重就会高一些,默认都是1;另外查询时可临时指定权重

        "coerce" : true, #清理脏数据:1,字符串会被强制转换为整数 2,浮点数被强制转换为整数;默认为true

        "copy_to" : "field_name", #自定_all字段;指定某几个字段拼接成自定义;具体如下举例

        "doc_values" : true, #加快排序、聚合操作,但需要额外存储空间;默认true,对于确定不需要排序和聚合的字段可false

        "dynamic" : true, #新字段动态添加 true:无限制 false:数据可写入但该字段不保留 'strict':无法写入抛异常

        "enabled" : true, #是否会被索引,但都会存储;可以针对一整个_doc

        "fielddata" : false, #针对text字段加快排序和聚合(doc_valuestext无效);此项官网建议不开启,非常消耗内存

        "eager_global_ordinals": true, #是否开启全局预加载,加快查询;此参数只支持textkeywordkeyword默认可用,而text需要设置fielddata属性

        "format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" ,#格式化 此参数代表可接受的时间格式 3种都接受

        "ignore_above" : 100, #指定字段索引和存储的长度最大值,超过最大值的会被忽略

        "ignore_malformed" : false ,#插入文档时是否忽略类型 默认是false 类型不一致无法插入

        "index_options" : "docs" ,

        # 4个可选参数

        # docs(索引文档号),

        # freqs(文档号 + 词频),

        # positions(文档号 + 词频 + 位置,通常用来距离查询),

        # offsets(文档号 + 词频 + 位置 + 偏移量,通常被使用在高亮字段)

        # 分词字段默认是position,其他的默认是docs

        "index" : true, #该字段是否会被索引和可查询 默认true

        "fields": {"raw": {"type": "keyword"}} ,#可以对一个字段提供多种索引模式,使用text类型做全文检索,也可使用keyword类型做聚合和排序

        "norms" : true, #用于标准化文档,以便查询时计算文档的相关性。建议不开启

        "null_value" : "NULL", #可以让值为null的字段显式的可索引、可搜索

        "position_increment_gap" : 0 ,#词组查询时可以跨词查询 既可变为分词查询 默认100

        "properties" : {}, #嵌套属性,例如该字段是音乐,音乐还有歌词,类型,歌手等属性

        "search_analyzer" : "ik_max_word" ,#查询分词器;一般情况和analyzer对应

        "similarity" : "BM25",#用于指定文档评分模型,参数有三个:

        # BM25 ESLucene默认的评分模型

        # classic TF/IDF评分

        # boolean:布尔模型评分

        "store" : true, #默认情况false,其实并不是真没有存储,_source字段里会保存一份原始文档。

        # 在某些情况下,store参数有意义,比如一个文档里面有titledate和超大的content字段,如果只想获取titledate

        "term_vector" : "no" #默认不存储向量信息,

        # 支持参数yesterm存储),

        # with_positionsterm + 位置),

        # with_offsetsterm + 偏移量),

        # with_positions_offsets(term + 位置 + 偏移量)

        # 对快速高亮fast vector highlighter能提升性能,但开启又会加大索引体积,不适合大数据量用

     

    3、复杂数据类型

    (1)数组类型:数组类型不需要专门制定数组元素的type。例如:

    字符型数组:[“one”,”two”]

    整形数组:[1,2]

    数组型数组:[1,[2,3]]等价于[1,2,3]

    对象数组:[{“name”:”mary”,”age”:20},{“name”:”john”,”age”:10}]

    (2)对象类型(Object datatype):_object_用于单个json对象

    (3)嵌套类型(Nested datatype):_nested_ 用于json数组;

    4、地理位置类型

    (4)地理坐标类型(Geo-pint datatype):_geo_point_ 用于经纬度坐标:

    (5)地理形状类型(Geo-shape datatype:_geo_shape_用于类似于多边形的复杂形状;

    5、特定类型

    (6)IPv4 类型(IPv4 datatype):ip 用于IPv4 地址

    (7)Completion 类型(Completion datatype):completion 提供自动补全建议

    (8)Token count 类型(Token count datatype):token_count 用于统计做子标记的字段的index数目,该值会一直增加,不会因为过滤条件而减少

    (9)mapper-murmur3 类型:通过插件,可以通过_murmur3_来计算index的哈希值

    (10)附加类型(Attachment datatype):采用mapper-attachments插件,可支持_attachments_索引,例如 Microsoft office 格式,Open Documnet 格式, ePubHTML

          下篇博客本人将记录使用elasticsearch查询的知识。若大家对本篇博客有所疑问或不同见解,欢迎大家进行评论。本人博客首页地址:https://home.cnblogs.com/u/chenyuanbo/

    技术在于沟通交流!  

     

  • 相关阅读:
    静态库和动态库的使用
    UbuntuNFS服务器配置
    ubuntu的网络配置
    几个重要的shell命令:diff patch tar find grep
    msp430系统时钟
    平台总线驱动设计
    总线设备驱动模型
    中断分层处理-工作队列
    6410-混杂设备驱动模型
    ubuntu中执行docker info出现警告信息WARNING: No memory limit support 或 WARNING: No swap limit support
  • 原文地址:https://www.cnblogs.com/chenyuanbo/p/10138901.html
Copyright © 2011-2022 走看看