Во-первых, я хотел бы сказать, что я использую Elasticsearch и Logstash 6.2, и из-за большого обновления многие темы несовместимы. Я дважды смотрел, прежде чем публиковать мои. :)
Я использую MySQL как базу данных и с Logstash 6.2 и JDBC, я автоматически передаю свои строки в Elasticsearch 6.2. Все отлично работает с этой стороны!
Тем не менее, я пытаюсь использовать Elasticsearch в качестве поисковой системы в проекте Node/Express. Я хотел бы создать поисковую панель автозаполнения, как описано в этом уроке. Использование Power of Elasticsearch: автозаполнение и нечеткий поиск.
Проблема в том, что я не могу включить автоматическое завершение, потому что мои данные, загруженные из MySQL, являются строковыми, а не как тип завершения:
Illegal_argument_exception, причина: Поле [extid] не является полем предложения завершения, статус: 400
Поэтому для функции getSuggestions я пробую:
function getSuggestions(text, size){
return elasticClient.search({
index: indexName,
type: indexType,
body: {
suggest: {
extidSuggester: {
text: text+'~',
term: {
field: "extid",
size: size
}
},
nameSuggester: {
text: text+'~',
term: {
field: "name",
size: size
}
}
}
}
});
}
который не дает мне автозаполнения.
Решение может состоять в том, чтобы отфильтровать целевые столбцы в conf в Logstash и привести к типу завершения. Кто-нибудь знает, как это сделать?
Есть ли другое решение для решения моей проблемы?
Наконец я отвечаю.
Когда я создал сопоставление, я использовал сопоставление по умолчанию, найденное в github.
Я добавил к этому сопоставление завершение типа для необходимых полей, и он решил мою проблему.
Просто как тот !