ElasticSearch 6.2: автозаполнение поиска из MySQL - PullRequest
0 голосов
/ 16 мая 2018

Прежде всего, я хотел бы сказать, что я использую Elasticsearch и Logstash 6.2, и из-за большого обновления многие темы не совместимы. Я посмотрел дважды, прежде чем отправлять мой. :)

Я использую MySQL в качестве базы данных, а с помощью Logstash 6.2 и JDBC я автоматически передаю свои строки в Elasticsearch 6.2. С этой стороны все отлично работает!

Однако я пытаюсь использовать Elasticsearch в качестве поисковой системы в проекте Node / Express. Я хотел бы создать панель автозаполнения, как описано в этом руководстве Использование возможностей Elasticsearch: автозаполнение и нечеткий поиск .

Проблема в том, что я не могу включить автозаполнение, потому что мои данные, загруженные из MySQL, имеют тип String, а не тип завершения:

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
               }
           }
         }
       }
  });
}

, который не дает мне автозаполнение.

Решением может быть фильтрация целевых столбцов в конфигурации Logstash и принудительное определение типа завершения. Кто-нибудь знает, как это сделать?

Есть ли другое решение для решения моей проблемы?

1 Ответ

0 голосов
/ 19 мая 2018

Я наконец-то отвечаю сам.

Когда я создал сопоставление, я использовал сопоставление по умолчанию, найденное на github .

Я добавил к этому отображению тип завершение для необходимых полей, и это решило мою проблему.

Все просто!

...