大数据开发:ElasticSearch 索引设置

提起ElasticSearch,大家首先会联想到的往往是其特殊的索引机制,带来的快速查询性能优势。前面我们也对ElasticSearch的索引机制做了简单的介绍,今天的大数据开发分享,我们来讲讲ElasticSearch 索引设置的相关问题。

在使用ES时,我们常见的就是需要生成一个template来定义索引的设置,分词器,Mapping等。
 

大数据学习:ElasticSearch 索引设置


Index设置

index.refresh_interval

配置一个刷新时间,将index buffer刷新到os cache的时间间隔,刷新到os cache的数据才可以被索引到,默认是1s.如果对实时性搜索要求不高的地方,可设置时间为30s,提高性能。

number_of_replicas

对于集群数据节点>=2的场景,建议副本至少设置为1(一主一从,共两个副本),可以提高集群容错和搜索吞吐量(副本分片可用于查询)。

index.number_of_shards

主副本的分片数,默认是5个,最大值限制为1024个,这个值是分片数可适当的增加,提高索引的并发性能,但是分片越多,也会导致资源耗费越高,索引要根据访问并发数和ES集群的资源来设置。经验公式:分片数=索引大小/分片大小经验值30GB,官方推荐Shard值在20-40GB性能最好,日志类:单分片<50GB;搜索类:单分片<20GB。不足100G,可直接设置3-5个分片(结合节点数和扩展性),超过100G则可以按照如上经验公式来规划。

index.max_result_window

索引能够查询到最大数据量,from+size深分页的最大条数,默认是10000,适当限制这个值可以防止深分页内存占用过多,如果全量导出,需要使用Scroll游标办法。

index.store.preload

默认情况下,Elasticsearch完全依靠操作系统文件系统缓存来缓存I/O操作.可以设置index.store.preload,以告知操作系统在打开时将热索引文件的内容加载到内存中。默认值为空,即不提前加载索引到内存中,常见的值有["nvd","dvd","tim","doc","dim"]。对应的norms,doc values,terms dictionaries,postings lists,points,常见的设置为index.store.preload=["nvd","dvd"],即提前加载norms评分信息和doc value数据到内存,便于快速索引。

index.sort.field和index.sort.order

建立索引的排序字段,写入的时候就按照顺序写入。对于一些具备顺序的字段,可以提前设置,比如时间字段。

Mapping设置

动态映射

mapping的通用配置,dynamic_templates配置动态类型转换,将一个类型转换为另一个类型

常见的类型和搜索类型的联系

(1)text类型作用:分词,将大段的文字根据分词器切分成独立的词或者词组,以便全文检索。

适用于:email内容、某产品的描述等需要分词全文检索的字段;

不适用:排序或聚合(Significant Terms聚合例外)

(2)keyword类型:无需分词、整段完整精确匹配。

适用于:email地址、住址、状态码、分类tags。

常见的搜索类型使用的字段类型

①term精确匹配

核心功能:不受到分词器的影响,属于完整的精确匹配。

应用场景:精确、精准匹配。

适用类型:keyword。

②prefix前缀匹配

核心功能:前缀匹配。

应用场景:前缀自动补全的业务场景。

适用类型:keyword。

③wildcard模糊匹配

核心功能:匹配具有匹配通配符表达式keyword类型的文档。支持的通配符:*,它匹配任何字符序列(包括空字符序列);?,它匹配任何单个字符。

应用场景:请注意,选型务必要慎重!此查询可能很慢多组关键次的情况下可能会导致宕机,因为它需要遍历多个术语。为了防止非常慢的通配符查询,通配符不能以任何一个通配符*或?开头。

适用类型:keyword。

④match分词匹配

核心功能:全文检索,分词词项匹配。

应用场景:实际业务中较少使用,原因:匹配范围太宽泛,不够准确。

适用类型:text。

⑤match_phrase短语匹配

核心功能:match_phrase查询首先将查询字符串解析成一个词项列表,然后对这些词项进行搜索;只保留那些包含全部搜索词项,且位置"position"与搜索词项相同的文档。

应用场景:业务开发中90%+的全文检索都会使用match_phrase或者query_string类型,而不是match。

适用类型:text。

⑥multi_match多组匹配

核心功能:match query针对多字段的升级版本。

应用场景:多字段检索。

适用类型:text。

⑦query_string类型

核心功能:支持与或非表达式+其他N多配置参数。

应用场景:业务系统需要支持自定义表达式检索。

适用类型:text。

⑧bool组合匹配

核心功能:多条件组合综合查询。

应用场景:支持多条件组合查询的场景。

适用类型:text或者keyword。一个bool过滤器由三部分组成:

must——所有的语句都必须(must)匹配,与AND等价。

must_not——所有的语句都不能(must not)匹配,与NOT等价。

should——至少有一个语句要匹配,与OR等价。

filter——必须匹配,运行在非评分&过滤模式。

⑨range范围搜索类型

适用类型:long,integer,double或者date

Mapping字段的参数设置

(1)index,倒排索引,not_analyzed,注意是否分词,尽量精简schema字段个数,不会被检索的字段就不要建立倒排。.field("index","no")

(2)doc values,正排索引,用于聚合或者排序

(3)norms,analyzed norms存储了多种正则化算子,用于docs的排序评分,如果不需要排序,可以disable norms

(4)index_options,有docs(文档有无),freqs(重复出现的文档评分更高),positions(涵盖了前2种,并且多了位置信息,用于临近查询),offsets(全部,用于高亮)四类。

关于大数据开发,ElasticSearch 索引设置,以上就为大家做了基本的介绍了。ElasticSearch 索引设置是入门学习阶段的一个重点,建议大家先对相关的概念建立起初步的认识。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值