• Elasticsearch--索引


    索引

    分片和副本

    一个索引由多个分片组成,每个分片包含文档集的一部分。副本主要是为了增强容错性,提高吞吐量。
    副本的数量可以随时的调整,但是分片的数量设定好后,不能修改

    映射配置

    类型确定机制

    数字类型和日期类型可以通过设置自动检测,这一般是默认开启的。

    dynamics_data_formats:设置可以被识别为日期格式列表。

    也可以禁用类型猜测,类型猜测禁用后,也就不能在现有索引中随意的添加字段。命令如:

    "mappings":{
    	"map":{
    		"dynamic":"false",
    		"properities":{
    			"a":"b"
              	.
    			.
    			.
    		}
    	}
    }
    

    索引结构映射

    elasticsearch有几个核心的类型

    1. string:字符串
    2. number:数字
    3. date:日期
    4. boolean:布尔型
    5. binary:二进制

    elasticsearch的mapping中对每个字段除了指定类型外,还有其他一些公共属性可以设定(除了二进制类型外):

    1. index_name:定义存储在索引中的字段的名称,若未定义,字段以对象的名字来命名
    2. index:值可以是:analyzed、no。如果字段类型是字符串,还可以是not_analyzed。默认是analyzed,当设置是no的时候,字段无法被索引,且使include_in_all属性失效
    3. store:值为:yes、no。指定字段的原始值是否被写入索引中。默认是no,在结果字段中不能返回该字段,但是使用_source字段,仍可返回该字段。
    4. boost:默认值1-,定义该字段在文档中的重要程度,越大越重要。
    5. null_value:如果字段不是索引文档的一部分,指定了写入索引的值。默认是忽略该字段
    6. copy_to:指定一个字段,字段的所有值都将复制到指定字段。
    7. include_in_all:指定该字段是否应包含在_all字段中。

    字符串类型具有的一些属性:

    1. term_vector:值是:no(默认值)、yes、with_offsets、with_positions和with_positions_offsets。是否计算该字段的Lucene词向量。如果使用高亮,那就需要计算这个词向量。忘记了,似乎也有办法
    2. omit_norms:true、false。经过分析的字符串字段默认是false,未经过分析但编入索引,默认是true。用于索引期间的加权计算。
    3. analyzer:用于索引和搜索的分析器名称。默认是全局定义的分析器名称。
    4. index_analyzer:用于建立索引的分析器名称。
    5. search_analyzer:搜索该字段时,用的分析器。
    6. norms.enabled:是否给字段加载加权基准(norms)。取值与omit_norms相反。
    7. norms.loading:eager、lazy。加载加权基准时,是否延迟加载。
    8. index_options:用于设置索引选项。可能的取值是docs(索引文档的数量)、freqs(索引的文档数量和词频)、positions(索引的文档数量、词频和单词出现位置)。默认值是freqs(从0.20版本开始可用)。
    9. ignore_above:字段的最大长度,超出指定长度的部分会被忽略。如果只关心字段的前N个字符,则该属性非常有用。

    数值类型独有的一些属性:

    1. precision_step:该属性设置为字段的每个取值生成的项数。值越低则生成的项数越多,进行range查询时就越快(但索引也会变大),默认值是4。
    2. ignore_malformed:取值可以为true或false,默认值是false。若想要忽略格式错误的数值,则应该设置为true。

    二进制类型
    二进制字段是指用base64来表示索引中存储的二进制数据,可用来存储二进制形式的数据,例如图像。默认情况下,该类型的字段只存储不索引。二进制类型只支持index_name属性

    日期类型独有的一些属性

    1. format:用于指定日期格式。默认值是dateOperationalTime。
    2. precision_step:该属性设置为字段的每个取值生成的项数。值越低则生成的项数越多,进行range查询时就越快(但索引也会变大),默认值是4。
    3. ignore_malformed:取值可以为true或false,默认值是false。若想要忽略格式错误的数值,则应该设置为true。

    日期类型默认使用UTC保存

    分析器

    分析器是一个用于分析数据或以我们想要的方式查询数据的工具。Elasticsearch允许我们在索引和查询阶段使用不同的分析器,并且可以在搜索的每个阶段选择处理数据的方式。下面是一些自带的分析器。

    1. standard:方便大多数欧洲语言的分析器
    2. simple:基于非字母字符来分离所提供的值,并将其转化成小写形式
    3. whitespace:基于空格字符分离所提供的值
    4. stop:除了simple分析器的功能外,基于所提供的停用词过滤数据
    5. keyword:一个非常简单的分析器,只传入提供的值。可以通过设置not_analyzed达到同样的目的
    6. pattern:使用正则分离文本
    7. snowball:类似simple分析器,但是提供了词干提取算法

    自定义分析器

    "settings": {
            "index": {
                "analysis": {
                    "analyzer": {
                        "en": {
                            "tokenizer": "standard",
                            "filter": [
                                "asciifolding",
                                "lowercase",
                                "ourEnglishFilter"
                            ]
                        }
                    },
                    "filter": {
                        "ourEnglishFilter": {
                            "type": "kstem"
                        }
                    }
                }
            }
        }
    

    指定一个名字为en的分析器,由一个分词器和多个过滤器组成。
    使用自定义的分析器的映射文件如下:

    {
        "settings":{
            "index":{
                "analysis":{
                    "analyzer":{
                        "en":{
                            "tokenizer":"standard",
                            "filter":[
                                "asciifolding",
                                "lowercase",
                                "ourEnglishFilter"
                            ]
                        }
                    },
                    "filter":{
                        "ourEnglishFilter":{
                            "type":"kstem"
                        }
                    }
                }
            }
        },
        "mappings":{
            "post":{
                "properties":{
                    "id":{
                        "type":"long",
                        "store":"yes",
                        "precision_step":"0"
                    },
                    "name":{
                        "type":"string",
                        "store":"yes",
                        "index":"analyzed",
                        "analyzer":"en"
                    }
                }
            }
        }
    }
    
    

    通过在请求中加入_analyze来显示查看分析器的工作过程。

    相似度模型

    elasticsearch可以对每个字段使用不同的相似度模型。可选的相似度模型如下:

    1. BM25模型:基于概率的模型。该模型适用于处理简短的文本文档时。使用此模型需要设置字段的similarity属性为BM25,不需要设置附加属性。
    2. 随机性偏差模型(DFR):基于具有相同名称的概率模型,适用于处理自然语言类的文本。使用该模型时,设置字段的属性值是DFR。
    3. 信息基础模型(IB):与DFR非常相似,也适用于处理自然语言类文本。

    使用DFR和IB模型时需要设置一些附加的属性。下面是一个IB模型示例:

    "similarity":{
            "esserverbook_ib_similarity":{
                "type":"IB",
                "distribution":"ll",
                "lambda":"df",
                "normalization":"z",
                "normalization.z.z":"0.25"
            }
        }
    

    属性的取值范围参阅官方文档。

    标示符

    {
        "book":{
            "_id":{
                "path":"book_id"
            },
            "properties":{
                "book_id":""
            }
        }
    }
    

    设定path属性,指定从book_id字段获取标示符(由于额外的解析,速度稍慢一些),此时_id字段的值就是book_id字段的值。

    段合并

    底层的Lucene库获取若干段,并在这段信息的基础上创建新的段。由此产生的段拥有所有存储在原始段中的文档,除了被标记为删除的那些之外。合并操作之后,源端将从磁盘上删除。段合并在CPU和I/O上的代价很高,控制其频率和时机。
    合并调度器
    并发合并调度器和串行合并调度器。默认是并发合并调度器,即合并和索引一起执行,速度快,但会存在不一致问题。
    合并因子
    合并因子越大合并的频次越小,索引就更多,索引速度也更快,但是内存占用越大。
    查询量大的索引设置更高的合并因子,保证索引效率。

    路由介绍

    默认情况下,elasticsearch会在所有索引的分片中均匀地分配文档。为了获取文档,elasticsearch必须查询所有分片并合并结果。可以把数据按照一定的依据来划分,即使用路由策略控制索引和查询,提高速度。
    使用路由参数或者路由字段进行路由设置,路由字段更加常用,也更灵活。见_routing字段介绍。

  • 相关阅读:
    自定义Filter服务
    filter 以及 orderBy的使用
    ng-repeat-start ng-repeat-end 的使用
    ng-repeat 与ng-switch的简单应用
    ng-bind-html 的使用
    Oracle instr用法
    Oracle left查询案例
    Oracle case用法
    mysql 导出导入sql
    Gson解析复杂JSON对象
  • 原文地址:https://www.cnblogs.com/51zone/p/9570871.html
Copyright © 2020-2023  润新知