对跨 Elasticsearch 类型的所有字段使用 Completion Suggester

Use Completion Suggester for all the fields of across the Elasticsearch type

我正在我的应用程序中实施 Completion Suggester,这是我的要求:

我正在使用 Elasticsearch 5.5.3(支持多种类型)。我的 Elasticsearch 中有大约 10 种类型,每种类型都有大约 10 个字符串字段。我想要做的是制作一个搜索框,当用户开始使用完成建议器输入时,它将完成短语(这 10 种类型的任何字段)。最好的方法是什么?使用 _all 字段是个好主意吗?

是的,使用 "custom all field" field of type completion

完全可以做到

首先,创建包含所有类型的索引,并确保 copy 类型为 completion:

的自定义字段中的每个字段
PUT my_index
{
  "mappings": {
    "type1": {
      "properties": {
        "field1": {
          "type": "text",
          "copy_to": "my_all"
        },
        "field2": {
          "type": "text",
          "copy_to": "my_all"
        },
        "my_all": {
          "type": "completion"
        }
      }
    },
    "type1": {
      "properties": {
        "field1": {
          "type": "text",
          "copy_to": "my_all"
        },
        "field2": {
          "type": "text",
          "copy_to": "my_all"
        },
        "my_all": {
          "type": "completion"
        }
      }
    }
  }
}

然后,您将像这样查询完成数据(即不指定任何映射类型并使用公共 my_all 字段):

POST my_index/_search
{
  "suggest": {
    "my-suggest": {
      "prefix": "bla",
      "completion": {
        "field": "my_all"
      }
    }
  }
}