ElasticSearch не возвращает результатов?

Я уверен, что пропустил что-то, но я пытаюсь начать с ElasticSearch. У меня есть удаленный сервер поиска, настроенный С www.searchly.comи я использую ElasticSearch-js, чтобы взаимодействовать с ним. Я настроил индекс с searchly, который вы можете видеть заполнен (как показано на скриншоте ниже).

Введите описание изображения здесь

Теперь я использую это в компоненте angular2, в конструкторе, который у меня есть:

constructor() {
  var connectionString = 'http://xyz@bifur-eu-west-1.searchly.com';
  this._client = new elasticsearch.Client({ host: connectionString, log: 'trace' });
}

и в жизненном цикле ngOnInit крюк, у меня был:

ngOnInit() {
    this._client.ping({
      // ping usually has a 3000ms timeout
      requestTimeout: Infinity,

      // undocumented params are appended to the query string
      hello: "elasticsearch!"
    }, function (error) {
      if (error) {
        console.trace('elasticsearch cluster is down!');
      } else {
        console.log('All is well');
      }
    });
}

который работал хорошо и показал, что кластер жив, и мой клиент успешно подключается к нему. Однако затем я изменил ping на:

this._client.search({
  index: 'plugins',
  type: '_all',
  body: {
    query: {
      match: {
        name: 'Contacts'
      }
    }
  }
}).then(function (resp) {
  var hits = resp.hits.hits;
}, function (err) {
  console.trace(err.message);
});

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

TRACE: 2016-10-03T08:43:04Z
  -> POST http://bifur-eu-west-1.searchly.com/plugins/_all/_search
  {
    "query": {
      "match": {
        "name": "Contacts"
      }
    }
  }
  <- 200
  {
    "_shards": {
      "total": 1,
      "successful": 1,
      "failed": 0
    },
    "hits": {
      "total": 0,
      "max_score": null,
      "hits": []
    },
    "took": 1,
    "timed_out": false
  }

Почему этот запрос не возвращает результат?

1 ответ

  1. Поймал! Оказывается, есть ошибка бэкэнда с searchly, которая требует, чтобы вы использовали явное typeв вашем запросе, или нет типа вообще, поэтому, изменив на:

    this._client.search({
      index: 'plugins',
      body: {
        query: {
          match: {
            name: 'Contacts'
          }
        }
      }
    }).then(function (resp) {
      var hits = resp.hits.hits;
    }, function (err) {
      console.trace(err.message);
    });
    

    Я получаю правильный результат!