rewrite 参数

编辑

此参数仅供专家用户使用。更改此参数的值可能会影响搜索性能和相关性。

Elasticsearch 内部使用 Apache Lucene 来支持索引和搜索。Lucene 最初的形式无法执行以下查询:

为了执行这些查询,Lucene 会将它们更改为更简单的形式,例如 bool 查询位集

rewrite 参数决定:

  • Lucene 如何计算每个匹配文档的相关性得分
  • Lucene 是否将原始查询更改为 bool 查询或位集
  • 如果更改为 bool 查询,则包含哪些 term 查询子句

有效值

编辑
constant_score_blended (默认)

为每个文档分配一个等于 boost 参数的相关性得分。

此方法在最耗时的词项上维护类似 bool 查询 的实现,同时将不太耗时的词项预处理为过滤器位集。

此方法可能导致生成的 bool 查询超出 indices.query.bool.max_clause_count 设置中的子句限制。如果查询超出此限制,Elasticsearch 将返回错误。

constant_score
对于较少的匹配词项,使用 constant_score_boolean 方法。否则,此方法按顺序查找所有匹配的词项,并使用位集返回匹配的文档。
constant_score_boolean

为每个文档分配一个等于 boost 参数的相关性得分。

此方法将原始查询更改为 bool 查询。此 bool 查询包含一个 should 子句和每个匹配词项的 term 查询

此方法可能导致最终的 bool 查询超出 indices.query.bool.max_clause_count 设置中的子句限制。如果查询超出此限制,Elasticsearch 将返回错误。

scoring_boolean

计算每个匹配文档的相关性得分。

此方法将原始查询更改为 bool 查询。此 bool 查询包含一个 should 子句和每个匹配词项的 term 查询

此方法可能导致最终的 bool 查询超出 indices.query.bool.max_clause_count 设置中的子句限制。如果查询超出此限制,Elasticsearch 将返回错误。

top_terms_blended_freqs_N

计算每个匹配文档的相关性得分,就像所有词项都具有相同的频率一样。此频率是所有匹配词项的最大频率。

此方法将原始查询更改为 bool 查询。此 bool 查询包含一个 should 子句和每个匹配词项的 term 查询

最终的 bool 查询仅包含前 N 个得分词项的 term 查询。

可以使用此方法来避免超出 indices.query.bool.max_clause_count 设置中的子句限制。

top_terms_boost_N

为每个匹配的文档分配一个等于 boost 参数的相关性得分。

此方法将原始查询更改为 bool 查询。此 bool 查询包含一个 should 子句和每个匹配词项的 term 查询

最终的 bool 查询仅包含前 N 个词项的 term 查询。

可以使用此方法来避免超出 indices.query.bool.max_clause_count 设置中的子句限制。

top_terms_N

计算每个匹配文档的相关性得分。

此方法将原始查询更改为 bool 查询。此 bool 查询包含一个 should 子句和每个匹配词项的 term 查询

最终的 bool 查询仅包含前 N 个得分词项的 term 查询。

可以使用此方法来避免超出 indices.query.bool.max_clause_count 设置中的子句限制。

rewrite 参数的性能注意事项

编辑

对于大多数用途,我们建议使用 constant_score_blendedconstant_scoreconstant_score_booleantop_terms_boost_N 重写方法。

其他方法会计算相关性得分。这些得分计算通常开销很大,并且不会改善查询结果。