Сбой typeahead.js при обновлении до Elasticsearch 6 - PullRequest
0 голосов
/ 02 сентября 2018

У меня была реализация подсказки завершения typeahead.js, работающая нормально с индексом ES5, и она перестала работать после обновления до ES6. Кажется, есть несколько проблем: _suggest? запрос был отменен в пользу _search, и хотя я могу делать успешные запросы с помощью curl и в Kibana, я не могу выразить их в функции typeahead Bloodhound ().

Это рабочее тело запроса из Kibana, работа с GET или POST:

GET places/_search
{
  "suggest": {
    "place-suggest": {
      "prefix": "den",
      "completion": {
        "field": "suggest"
      }
    }
  }
}

Это рабочий локон с новым ES6:

curl -XGET "http://localhost:9200/places/_search?pretty" \
  -H 'Content-Type: application/json' -d'{"suggest":{"place-suggest": \ 
  {"prefix":"den","completion" : {"field" : "suggest"}}}}'

Это старый Bloodhound (), работавший в ES5:

var names = new Bloodhound({
  datumTokenizer: function(datum) {
    return Bloodhound.tokenizers.whitespace(datum.value);
  },
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  remote: {
    wildcard: encodeURIComponent('%QUERY'),
    url: 'http://localhost:9200/places/_suggest?source=' +
        encodeURIComponent(
          '{"q":{"prefix":"%QUERY",
            "completion":{"field":"suggest"}}}'),

  transform: function(response) {
    return $.map(response.q[0].options, function(place) {
      return {
        id: place._source.id,
        data: place._source.is_conflation_of,
        value: place._source.representative_title,
        names: place._source.suggest
      };
    });
   }
  }

});

И соответствующая функция typeahead:

$('#bloodhound .typeahead').typeahead({
    hint: true, highlight: true, minLength: 3
  },
  {
    name: 'places', limit: 10, display: 'value', source: toponyms,
    templates: {
      empty: [
        '<div class="empty-message">','no matches','</div>'
        ].join('\n'),
      suggestion: template
    }
});

И, наконец, моя новая функция Bloodhound () - ошибка 500:

var toponyms = new Bloodhound({
  datumTokenizer: function(datum) {
     return Bloodhound.tokenizers.whitespace(datum.value); },
  queryTokenizer: Bloodhound.tokenizers.whitespace,
  remote: {
    wildcard: encodeURIComponent('%QUERY'),
    url: 'http://localhost:9200/linkedplaces/_search?source=' + encodeURIComponent(
     '{"suggest":{"place-suggest":{"prefix":"%QUERY","completion":{"field":"suggest"}}}}'
    ),
    transform: function(response) {
      return $.map(response.q[0].options, function(place) {
        return {
          ...
        };
      });
    }
  }
});
...