面试题答案
一键面试常见可选参数及优化策略
- from & size
- 含义:
from
用于指定从结果集的第几项开始返回,size
用于指定返回结果的数量。 - 优化策略:避免使用过大的
from
值进行深度分页。因为深度分页时,Elasticsearch 需要在每个分片上查询from + size
条数据,然后汇总排序后再返回size
条数据,这会消耗大量资源。如果要实现深度分页,可使用scroll
或search_after
替代。例如,scroll
适用于需要大量数据一次性处理的场景,它会在初始查询时创建一个快照,后续通过滚动游标获取数据;search_after
则基于上一次查询结果的最后一条数据的某个排序字段值,继续往后查询,适用于实时性要求较高且需按顺序遍历数据的场景。
- 含义:
- sort
- 含义:用于指定排序字段及排序方式(升序
asc
或降序desc
)。 - 优化策略:尽量使用单字段排序,多字段排序会增加查询复杂度和资源消耗。如果必须使用多字段排序,确保第一个排序字段的选择性足够高,这样能快速缩小结果集范围。同时,对排序字段建立合适的索引,能显著提升排序性能。例如,对于数值类型字段的排序,确保该字段已建立数值类型的索引。
- 含义:用于指定排序字段及排序方式(升序
- query
- 含义:定义具体的查询条件,如
match
、term
、bool
等查询类型。 - 优化策略:对于
match
查询,当查询文本较短且精确匹配需求高时,可考虑使用term
查询替代,因为match
查询会对输入文本进行分词处理,增加了查询复杂度。在使用bool
查询时,合理组织must
、should
、filter
等子句,将能快速过滤大量数据的条件放在filter
子句中,因为filter
子句不参与评分,能提升查询效率。同时,对查询字段建立合适的索引,对于文本字段根据需求选择合适的分析器创建索引,以提高查询匹配效率。
- 含义:定义具体的查询条件,如
- _source
- 含义:用于指定返回文档中需要包含的字段,可减少返回的数据量。
- 优化策略:只返回实际需要的字段,避免返回整个文档。这样可以减少网络传输和内存消耗,提升查询性能。例如,如果只需要文档中的
title
和content
字段,可通过设置_source: ["title", "content"]
来限定返回字段。
- timeout
- 含义:设置查询的超时时间,防止查询时间过长占用过多资源。
- 优化策略:合理设置
timeout
值,既要保证复杂查询有足够时间完成,又要避免因设置过长导致资源长时间被占用。对于不同类型的查询和数据量,需要通过测试来确定合适的超时时间。如果经常出现超时,可分析查询语句,进行性能优化,如优化索引、调整查询逻辑等。