分析测试百科网

搜索

喜欢作者

微信支付微信支付
×

Elasticsearch性能优化指南(十二)

2020.9.28
头像

王辉

致力于为分析测试行业奉献终身

使用Profile API调整查询

您还可以使用Profile API分析查询和聚合每个部分的成本。这可能使您可以调整查询花费更少成本,从而获得正面的性能结果并减少负载。另请注意,可以在Search Profiler中轻松查看Profile API负载以提高可读性,Search Profiler是所有X-Pack许可证(包括免费的X-Pack Basic许可证)中均可使用的Kibana开发工具UI。

对Profile API的一些警告是:

Profile API作为调试工具增加了搜索执行的大量开销,并且还可能产生非常冗长的输出

给定增加的开销,得出的花费时间指标可能不是实际花费时间,但是可以在子句之间进行比较以获取相对时间差异

Profile API最适合用于研究查询中花费最多开销的子句后面的可能原因,但并非旨在准确衡量每个子句的时间

使用index_phrases进行更快的短语查询

文本字段具有index_phrases选项,该选项索引2个,并且查询解析器会自动利用该选项来运行不带斜率的词组查询。如果您的用例涉及运行大 量短语查询,则可以大大加快查询速度。

使用index_prefixes进行更快的前缀查询

文本字段具有index_prefixes选项,该选项为所有term的前缀编制索引,并由查询解析器自动利用以运行前缀查询。如果您的用例涉及运行大量前缀查询,则可以大大加快查询速度。

使用constant_keyword加快过滤

调整磁盘使用率

禁用不需要的功能

默认情况下,Elasticsearch为大多数字段编入索引并将doc值添加到大多数字段,以便可以立即搜索和聚合汇总它们。例如,如果您有一个名为foo的数字字段,需要在其上运行直方图,但您永远不需要对其进行过滤,则可以安全地在 mappings中禁用对此字段的索引:

text字段在索引中存储归一化因子,以便能够对文档进行评分。如果您只需要 text字段上的匹配功能但不关心产生的分数,则可以将Elasticsearch配置为不将 norms 写入索引:

curl -X PUT "localhost:9200/index?pretty" -H 'Content-Type: application/json' -d'{"mappings": {"properties": {"foo": {"type": "text","norms": false      }    }  }}'

默认情况下,文本字段还将频率和位置存储在索引中。频率用于计算分数,位置用于运行 phrase 查询。如果您不需要运行 phrase 查询,可以告诉Elasticsearch不要索引位置信息:

curl -X PUT "localhost:9200/index?pretty" -H 'Content-Type: application/json' -d'{"mappings": {"properties": {"foo": {"type": "text","index_options": "freqs"      }    }  }}'

此外,如果您既不计分,也可以将Elasticsearch配置为仅对每个 term的匹配文档编制索引。您仍然可以在此字段上进行搜索,但是词组查询将引发错误,并且评分将假定 term在每个文档中仅出现一次。

curl -X PUT "localhost:9200/index?pretty" -H 'Content-Type: application/json' -d'{"mappings": {"properties": {"foo": {"type": "text","norms": false,"index_options": "freqs"      }    }  }}'


互联网
文章推荐