本文首发于体内互联网技术微信公众号
引用>
英文原文:https://qbox。io/博客/elasticsearch-search-tuning-part-2亚当Vanderbush
译者:杨振涛<强>目录强>
<李>预索引数据李> <李>映射李> <李>避免使用脚本李> <李>强制合并只读索引李>
Elasticsearch搜索调优权威指南,是QBOX在其博客上发布的系列文章之一,本文是该系列的第二篇,主要介绍了索引预处理,映射建立,避免脚本的使用,索引段合并等搜索性能相关的调优方法。
本文是Elasticsearch搜索调优系列文章3篇中的第2篇,1篇第参考这里(点击)。本系列教程旨在更进一步讨论针对Elasticsearch 5.0及以上版本的搜索调优技术,策略及建议。
<强> 1。预索引数据强>
为了优化数据的索引方式,应当在查询中预置一些模式,比如,如果所有文档都有一个叫<强> 强>的价格价格字段,并且大部分查询在一个固定范围列表上执行范围<强> 强>聚合,那么就可以通过预索引范围到索引中并使用一个<强> 强>条款聚合,来加速该聚合。
比如有如下文档:
<代码> curl -XPUT ' ES_HOST: ES_PORT/索引/类型/1 application/json ?漂亮' - h - type:“- d”{ “名称”:“碗”, “价格”:13 }' 代码>以及如下搜索请求:
<代码>旋度xget ES_HOST: ES_PORT/索引/_search application/json ?漂亮' - h - type:“- d”{ " gg ": { " price_ranges ": { “范围”:{ “字段”:“价格”, “范围”:[ {”到“:10}, {”到““从”:10日:100}, {“从”:100} ] } } } }' 代码>然后就可以在索引阶段增加一个price_range字段,该字段应该映射为一个关键字:
<代码> curl -XPUT ' ES_HOST: ES_PORT/索引 application/json ?漂亮' - h - type:“- d”{ “映射”:{ "类型":{ "属性":{ " price_range ": { “类型”:“关键字” } } } } }' 旋度-XPUT ES_HOST: ES_PORT/索引/类型/1 application/json ?漂亮' - h - type:“- d”{ “名称”:“碗”, “价格”:13, “price_range”:“10 - 100” }' 代码>接下来搜索请求就能聚合这个新的字段,而不是在价格<强> 强>字段上执行一个范围聚合。
<代码>旋度xget ES_HOST: ES_PORT/索引/_search application/json ?漂亮' - h - type:“- d”{ " gg ": { " price_ranges ": { “条款”:{ “字段”:“price_range” } } } }' 代码><强> <强> 2。映射强> 强>
事实上,一些数值型的数据,并不意味着总是要被映射为一个数值型字段。典型的,那些存储为诸如<强> ISBN 强>之类的标识符,或者任何标识另一个数据库中记录的数字的字段,可能映射为关键字比映射为一个<强>整数强>或<强>长强>类型更好。
关键字类型用于索引结构化内容,比如<强>邮件>强地址,主机名称,状态码,邮政编码或标签。
典型地用于过滤(比如查找所有已发布的博客文章),排序以及聚合。关键字字段只可通过其精确值搜索得到。
如果需要索引全文内容比如<强>邮件强>内容或产品描述,可能就要使用一个文本字段。
下面是一个关键字字段映射的示例:
<代码> curl -XPUT ' ES_HOST: ES_PORT/my_index application/json ?漂亮' - h - type:“- d”{ “映射”:{ " my_type ": { "属性":{ "标签":{ “类型”:“关键字” } } } } }' 代码>从<强> 2。x >强版本导入的索引是不支持关键字的;相反,它们会试图把<强>关键字强>类型降级为<强>字符串强>类型。这支持合并新的映射和旧的映射。长期存在的索引,必须在升级到<强> 6。x >强版本前重建,但是映射降级提供了按自己的计划实施重建的机会。
<强> <>强3。避免使用脚本强> 强>
一般来说要尽量避免使用脚本;如果必须要使用,优先选择<强>无痛>强和表达式引擎。
<强>无痛强>是一门简单安全的脚本语言,专门为在<强> Elasticsearch 强>中使用而设计,是<强> Elasticsearch 强>的默认脚本语言,可安全地用于内联和存储脚本。关于<强>无痛
Elasticsearch搜索调优权威指南(2/3)