Elasticsearch搜索调优权威指南(2/3)

  
  

本文首发于体内互联网技术微信公众号
英文原文: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)