2017-02-23 49 views
0

Я использую версию Elastic 5.1.2. Я использую Elastic java Restclient для публикации и запроса документов из поиска Elastic.Упругий поиск GET не дает последнего документа

Я не получаю точное количество документов, когда я использую операцию GET сразу после операции POST. Если я спал в течение> 1 с между POST и GET, то операция GET может дать точный счет.

Мой поток операций: 1) опубликовать новую транзакцию (документ) с помощью операции POST. 2) получить счетчик итоговых документов, используя операцию GET. это сразу после POST.

Я думаю, что Elastic требует времени для обновления индекса. Это проблема с Elasticsearch или с любыми моими настройками. Пожалуйста, помогите

ответ

2

Это нормальное поведение! Когда вы индексируете новые данные, он не доступен сразу, но будет после следующего обновления, который будет выполняться один раз в секунду по умолчанию.

Если это беспокоит вас, у вас есть несколько вариантов:

  1. вы можете позвонить в /_refresh endpoint после размещения документов и немедленно обновить индекс и следующий GET вызов будет работать
  2. вы можете добавить ?refresh=true parameter в вашем POST-вызове при индексировании документов, и в основном это будет делать то же, что и
  3. вы можете добавить ?refresh=wait_for parameter в свой POST-вызов при индексировании документов, и вызов будет возвращаться только после выполнения операции обновления, чтобы следующий вызов GET вернет d ocuments
  4. вы можете уменьшить index.refresh_interval в своих настройках (по умолчанию - 1 секунда), чтобы операции обновления происходили чаще.

Просто знайте, что с точки зрения производительности наименее агрессивный способ достижения того, что вы хотите, - это 3, то есть это новый параметр, введенный в ES 5, который не будет принудительно обновлять ваш индекс, но будет возвращаться только после того, новые индексированные документы доступны для поиска. Очень часто принудительное обновление (1, 2 и 3) может привести к снижению производительности.

+0

Спасибо Val. Я беспокоился о производительности, обновляясь. Несмотря на то, что я дал данные образца здесь, но мой фактический usecase имеет 30 txns в секунду и требует высокой производительности, а также правильного подсчета, не дожидаясь 1 секунды. Поскольку это нормальное поведение резины, я должен выбрать вариант, и я склоняюсь к варианту 3. Спасибо за подробный ответ со ссылками. –

+0

В этом случае этот ответ также может помочь: http://stackoverflow.com/questions/31499575/how-to-deal-with-elasticsearch-index-delay/34391272#34391272 – Val

+0

Спасибо за указание обходного решения. Как я уже сказал, это приложение большого объема, не будем ли мы входить в такую ​​ситуацию, как: опубликовано 1 txn и называется get, и это будет обновляться через 1 секунду, в течение 1 секунды я отправил еще 10 транзакций. Для 11-й транзакции моя операция выполняется только через 1 секунду после 1-го сообщения txn. Будет ли моя 11-я сделка получать все 11 транзакций? Или это похоже, каждый пост будет обновляться через ровно 1 секунду, хотя у нас есть обновления между ними? –