type
status
date
slug
summary
tags
category
icon
password
1、简介
索引配置(Settings) 定义了分片数量及副本数量等相关的配置信息。可以通过下面方式定义 settings
索引的配置也分为静态配置和动态配置
- 静态配置:必须在创建映射时写入settings。
- 动态配置:既可以在settings中设置,也可以在创建映射后调用REST服务进行修改。
1.1 索引静态配置
静态配置即索引创建后不能修改。常用项如下:
- number_of_shards :主分片数,默认为 5。只能在创建索引时设置,不能修改
- analysis:设置自定义分词器
- shard.check_on_startup :是否在索引打开前检查分片是否损坏,当检查到分片损坏将禁止分片被打开
- 可选值:false:不检测;checksum:只检查物理结构;true:检查物理和逻辑损坏,相对比较耗CPU;fix:类同与false,7.0版本后将废弃。默认值:false。
- codec:数据存储的压缩算法,默认算法为 LZ4,也可以设置成best_compression,best_compression压缩比较好,但存储性能比LZ4差
- routing_partition_size :路由分区数,默认为 1,只能在索引创建时设置。此值必须小于index.number_of_shards,如果设置了该参数,其路由算法为: (hash(routing) + hash(id) % index.routing_parttion_size ) % number_of_shards。如果该值不设置,则路由算法为 hash(routing) % number_of_shardings,routing默认值为_id。
1.2 索引动态配置
动态配置可以在运行时进行配置修改。常用项如下:
- number_of_replicas :每个主分片的副本数,默认为 1,该值必须大于等于0
- auto_expand_replicas :基于可用节点的数量自动分配副本数量,默认为 false(即禁用此功能)
- refresh_interval :执行刷新操作的频率,这使得索引的最近更改可以被搜索。默认为 1s。可以设置为 -1 以禁用刷新。
- max_result_window :用于索引搜索的 from+size 的最大值。默认为 10000
- max_rescore_window : 在搜索此索引中 rescore 的 window_size 的最大值
- blocks.read_only :设置为 true 使索引和索引元数据为只读,false 为允许写入和元数据更改。
- blocks.read_only_allow_delete:与blocks.read_only基本类似,唯一的区别是允许删除动作。
- blocks.read :设置为 true 可禁用对索引的读取操作
- blocks.write :设置为 true 可禁用对索引的写入操作。
- blocks.metadata :设置为 true 可禁用索引元数据的读取和写入。
- max_refresh_listeners :索引的每个分片上可用的最大刷新侦听器数
- max_docvalue_fields_search:一次查询最多包含开启 doc_values 字段的个数,默认为100。
2、文本分析
2.1 文本分析的原理
Elasticsearch规定,一个完整的文本分析过程需要经过大于等于零个字符过滤器、一个分词器、大于等于零个分词过滤器的处理过程。文本分析的顺序是先进行字符过滤器的处理,然后是分词器的处理,最后是分词过滤器的处理。相关说明如下:
- 字符过滤器(Character Filters):用于对原始文本做简单的字符过滤和转换,例如,Elasticsearch内置的HTML strip字符过滤器可以用于方便地剔除文本中的HTML标签。
- 分词器(Tokenizer):分词器的功能就是把原始的文本按照一定的规则切分成一个个单词,对于中文文本而言分词的效果和中文分词器的类型有关。分词器还会保留每个关键词在原始文本中出现的位置数据。Elasticsearch内置的分词器有几十种,通常针对不同语言的文本需要使用不同的分词器,你也可以安装一些第三方的分词器来扩展分词的功能。
- 分词过滤器(Token Filters):用于对用分词器切词后的单词做进一步过滤和转换,例如,停用词分词过滤器(stop token filter)可以把分词器切分出来的冠词a、介词of等无实际意义的单词直接丢弃,避免它们影响搜索结果。
上面这个图展示了 analysis(文本分析)的过程。analysis 通过 analyzer(分词器)来完成,而 analyzer 在索引配置 settings 里面设置。下面介绍如何使用分析器。
2.2 使用分析器
使用分析器有三种方式:
- 定义索引 settings 的时候指定默认分析器。
- 定义字段属性的时候指定分析器。
- 可以直接调用分词器 API 对现成的文本进行分词,一般用于调试。
2.2.1 定义索引 settings 的时候指定分析器
分析器(analyzer)属于静态配置,只能在创建索引的时候定义。这里设置的分析器相当于索引的默认分析器,索引新增字段的时候如果没有显式设置分析器,就会使用默认分析器。
我们可以使用内置分词器或者第三方分词器,也可以使用自定义的 char_filter、tokenizer、filter 来自由组合。下面介绍几种使用场景
1、使用内置的分析器。这里使用内置的分词器 simple。
2、自定义分析器。我们也可以自定义分词器组件 char_filter、tokenizer、filter 的内容,这种方式更加灵活。例如,你可以定义一个分析器,使用字符过滤器过滤掉 HTML 标签,用标准分词器把文本、单词和数字切分到最细粒度,同时添加一个停用词黑名单过滤掉无意义的中文文本,代码如下
2.2.2 定义字段属性的时候指定分析器
如果我们不想用索引默认的分析器,可以在新增字段的时候显式指定分析器。例如下面全局默认分析器为 simple,但是 title 字段指定使用 whitespace 分析器。
2.2.3 使用分析器 API 分析文本
可以使用
_analyze
的 REST 端点测试分析器的分词效果,这种方式适用于本地调试。有以下三种使用方式:- 指定内置分析器分析文本
- 使用索引字段的分析器分析文本
- 自定义分析器组件进行文本分析
3、内置分析器
Elasticsearch 内置了8种分析器,可以直接使用它们。这些分析器有不同的使用效果,具体内容如图所示。
3.1 Standard Analyzer
默认的分词器,它会对输入的文本按词的方式进行切分,切分好以后会进行转小写处理,默认的 stopwords 是关闭的。
3.2 Simple Analyzer
只包括了 Lower Case 的 Tokenizer,它会按照非字母切分,非字母的会被去除,最后对切分好的做转小写处理,然后接着用刚才的输入文本,分词器换成 simple 来进行分词。
3.3 Stop Analyzer
由 Lowe Case 的 Tokenizer 和 Stop 的 Token Filters 组成的,相较于刚才提到的 Simple Analyzer,多了 stop 过滤,stop 就是会把 the,a,is 等修饰词去除。
3.4 Whitespace Analyzer
按照空格切分,不转小写
3.5 Keyword Analyzer
不分词,直接将输入当做输出
3.6 Pattern Analyzer
通过正则表达式的方式进行分词,默认是用
\W+
进行分割的,也就是非字母的符合进行切分的,运行结果和 Stamdard Analyzer 一致。4、IK 分词器
在使用 Elasticsearch 进行搜索中文时,Elasticsearch 内置的分词器会将所有的汉字切分为单个字,对用国内习惯的一些形容词、常见名字等则无法优雅的处理,此时就需要用到一些开源的分词器。IK 分词器是业务中普遍采用的中文分词器。
4.1 安装 IK 分词器
- 下载插件,注意要下载和使用的Elasticsearch 匹配的版本,否则会启动报错。
- 在 Elasticsearch 的安装目录的 Plugins 目录下新建 ik 文件夹,然后将下载的安装包解压到此目录下。
- 重启 Elasticsearch。
4.2 使用 IK 分词器
IK 分词器包含 ik_smart 以及 ik_max_word 两种分词器
- ik_smart:分词器颗粒度较粗,满足分词场景要求不高的业务
- ik_max_word:分词颗粒度小,满足业务场景更丰富
通常,索引时的文本分析使用 ik_max_word 更加合适,而全文检索时的文本分析使用 ik_smart 较为多见。值得注意的是,每个分词结果用偏移量保存了每个分词在原始文本中出现的位置,这类位置信息在全文检索结果高亮展示时会被用到。
另外,IK分词器虽然能够识别很多中文词,但是它无法自动发现新词,如果你想扩展自己的词典,则需要把扩展的内容配置到IK分词器目录下的IKAnalyzer.cfg.xml文件中。
4.2.1 创建索引时设置 IK 分词器
4.2.2 使用 ik_smart 分词器
使用 ik_smart 分词器测试分词效果
返回数据
4.2.3 使用 ik_max_word 分词器
使用 ik_max_word 分词器测试分词效果
返回数据
- Author:mcbilla
- URL:http://mcbilla.com/article/b1b13018-3589-4522-ac8b-5a9d1879cac9
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts