Suggesters

原文链接 : https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-suggesters.html

译文链接 : http://www.apache.wiki/display/Elasticsearch/Suggesters

贡献者 : @Josh

suggest 特征通过使用 suggester 基于所提供的文本来建议相似的术语。部分 suggest 功能还在开发中。

suggest 请求部分在 _search 请求中或者通过 REST**_suggest** 断点和查询部分一起定义。

  1. POST twitter/_search
  2. {
  3. "query" : {
  4. "match": {
  5. "message": "tring out Elasticsearch"
  6. }
  7. },
  8. "suggest" : {
  9. "my-suggestion" : {
  10. "text" : "trying out Elasticsearch",
  11. "term" : {
  12. "field" : "message"
  13. }
  14. }
  15. }
  16. }

针对_suggest 端点执行的建议请求应忽略周围的 suggest 元素,该元素仅在 suggest 请求是搜索的一部分时使用。

  1. POST _suggest
  2. {
  3. "my-suggestion" : {
  4. "text" : "tring out Elasticsearch",
  5. "term" : {
  6. "field" : "message"
  7. }
  8. }
  9. }

每个请求可以指定几个 suggestions 。 每个 suggestion 用任意名称标识。 在下面的示例中,请求了两个 suggestionsmy-suggest-1my-suggest-2 两个 suggestions 使用术语 suggester,但有不同的 test

  1. POST _suggest
  2. {
  3. "my-suggest-1" : {
  4. "text" : "tring out Elasticsearch",
  5. "term" : {
  6. "field" : "message"
  7. }
  8. },
  9. "my-suggest-2" : {
  10. "text" : "kmichy",
  11. "term" : {
  12. "field" : "user"
  13. }
  14. }
  15. }

下面的 suggest 响应示例包括对于 my-suggest-1my-suggestion-2suggest 响应。 每个suggest 部分包含条目(entries)。 每个条目实际上是来自 suggest 文本的 token ,并且包含 suggest 文本中的 suggest 条目文本,原始的条目开始于 suggest 偏移(offset)和长度,并且如果找到任意数目的选项。

  1. {
  2. "_shards": ...
  3. "my-suggest-1": [ {
  4. "text": "tring",
  5. "offset": 0,
  6. "length": 5,
  7. "options": [ {"text": "trying", "score": 0.8, "freq": 1 } ]
  8. }, {
  9. "text": "out",
  10. "offset": 6,
  11. "length": 3,
  12. "options": []
  13. }, {
  14. "text": "elasticsearch",
  15. "offset": 10,
  16. "length": 13,
  17. "options": []
  18. } ],
  19. "my-suggest-2": ...
  20. }

每个选项数组(option array)包含一个选项对象,其中包括 suggest 文本,其文档频率和分数与 suggest 输入文本相比较。 分数的意义取决于使用的suggester。 术语 suggester 的分数是基于编辑(edit)距离。

全局 suggest 文本

为了避免重复 suggest 文本,可以定义全局文本。 在下面的示例中,suggest 文本是全局定义的,并适用于 my-suggest-1my-suggest-2 建议。

  1. POST _suggest
  2. {
  3. "text" : "tring out Elasticsearch",
  4. "my-suggest-1" : {
  5. "term" : {
  6. "field" : "message"
  7. }
  8. },
  9. "my-suggest-2" : {
  10. "term" : {
  11. "field" : "user"
  12. }
  13. }
  14. }

在上述示例中,suggest 文本也可以被指定为 suggest 特定选项。 在 suggestion 级别上指定的 suggest 文本覆盖全局级别上的 suggest 文本。