Использовать подсказку завершения для всех полей типа Elasticsearch - PullRequest
0 голосов
/ 03 мая 2019

Я внедряю Completion Suggester в моем приложении, и вот мое требование:

Я использую Elasticsearch 5.5.3 (который поддерживает несколько типов).У меня есть около 10 типов в моем Elasticsearch, и каждый тип имеет около 10 строковых полей.То, что я хочу сделать, - это создать единое окно поиска, в котором будет завершена фраза (из любых полей этих 10 типов), когда пользователь начнет печатать, используя подсказку для завершения.Что может быть лучшим подходом к этому?Является ли использование _all field хорошей идеей?

1 Ответ

1 голос
/ 03 мая 2019

Да, это вполне выполнимо, используя «настраиваемое все поле» поле типа completion

Сначала создайте индекс со всеми типами и сделайтеОбязательно скопируйте каждое поле в настраиваемое поле типа 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"
      }
    }
  }
}
...