# Suggester变化

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking_50_suggester.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/breaking_50_suggester.html)

译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=4260769](http://www.apache.wiki/pages/viewpage.action?pageId=4260769)

贡献者 : [片刻](/display/~jiangzhonglian)

完成提示器已经过完全重写。这意味着类型completion字段的语法和数据结构已更改，完成suggester请求的语法和响应也已更改。有关详细信息，请参阅[完成提示](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-suggesters-completion.html)。

对于在Elasticsearch 5.0.0之前创建的索引，completion字段和完成提示符将继续按照在Elasticsearch 2.x中的方式工作。但是，不可能对在2.x中创建的索引和在5.x中创建的索引运行完成建议符查询。

强烈建议在5.x中重新索引包含2.x completion字段的索引，以利用下面列出的新功能。

注意

Note

在重建索引时，您将需要更改完成字段值的结构。

## 完成建议是接近实时的

以前，即使在刷新索引后，已删除的建议也可能包含在结果中。现在，删除在接近实时的时间是可见的，即一旦索引被刷新。这适用于上下文和完成建议者的建议条目。

## 完成建议书是面向文档的

建议知道他们所属的文档。现在，相关文档（_source）作为completion建议的一部分返回。

重要

_source元字段必须启用，这是默认行为，以启用返回_source与建议。

以前，context和completion建议者支持索引时间payloads选项，用于存储和返回带有建议的元数据。现在，元数据可以被存储为与在查询时检索的建议相同的文档的一部分。已删除对索引时间payloads的支持，以避免使用建议元数据膨胀内存索引。

## 更简单的完成索引

由于建议是面向文档的，因此建议元数据（例如 output）现在应被指定为文档中的字段。删除建议索引条目索引时指定output的支持。现在建议结果条目的text总是建议input的未分析值（与在5.0之前的索引中索引建议时不指定output相同）。

## 具有多个上下文的完成映射

completion字段映射中的context选项现在是一个数组，用于支持每个completion字段的多个命名contexts 。注意，这是糖用于索引不同名称下不同上下文的相同建议。已删除命名context的default选项。现在，在没有context的情况下针对启用上下文的完成字段进行查询，得到来自所有索引建议的结果。请注意，匹配所有上下文查询的性能会随给定completion字段的唯一context值的数量而降低。

## 具有多个上下文过滤的完成建议

之前在建议请求中的context选项用于通过context值过滤建议。现在，该选项已命名为上下文以指定多个命名contexts过滤器。请注意，5.0之前的索引不支持。以下是通过颜色和位置上下文过滤的建议查询的contexts片段：

```
"contexts": {
  "color": [ {...} ],
  "location": [ {...} ]
}
```