rewrite 参数

edit

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

Elasticsearch 在内部使用 Apache Lucene 来支持索引和搜索。在其原始形式中,Lucene 无法执行以下查询:

为了执行这些查询,Lucene 将这些查询转换为更简单的形式,例如一个 bool 查询 或一个 位集

参数 rewrite 决定了:

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

有效值

edit
constant_score_blended (Default)

为每个文档分配一个相关性分数,该分数等于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 查询仅包含得分最高的 Nterm 查询。

您可以使用此方法来避免超过 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参数的性能考虑

edit

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

其他方法计算相关性分数。这些分数计算通常成本高昂,并且不会改善查询结果。