对所有Elasticsearch类型的所有字段使用完成建议程序

时间:2019-05-02 21:03:54

标签: elasticsearch completion

我正在我的应用程序中实现完成建议程序,这是我的要求:

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

1 个答案:

答案 0 :(得分:1)

是的,使用类型为"custom all field"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"
      }
    }
  }
}