Обновить против флеш


Если новый документ индексируется в индекс Elasticsearch, то он доступен для поиска примерно через 1 секунду после операции индексирования. Однако он может быть вынужден сделать этот документ доступным для поиска немедленно, позвонив _flush или _refresh операция на индекс. В чем разница между этими двумя операциями - результат для них кажется одинаковым, документ сразу же доступен для поиска.

что конкретно делает каждая из этих операций?

документация ES кажется, не решать эту проблему глубоко.

2 53

2 ответа:

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

обновление эффективно вызывает повторное открытие на читателе индекса lucene, так что моментальный снимок данных, которые вы можете искать, обновляется. Эта функция в Lucene является частью Луго практически в режиме реального времени через API.

An elasticsearch обновить делает ваши документы доступными для поиска, но не гарантирует, что они будут записаны на диск в постоянный хранение, поскольку оно не вызывает fsync, таким образом не гарантирует долговечность. То, что делает ваши данные долговечными, - это фиксация lucene, которая намного дороже.

хотя вы можете вызвать lucene reopen каждую секунду, вы не можете сделать то же самое с Lucene commit.

через lucene вы можете иметь новые документы, доступные для поиска в режиме реального времени, вызывая reopen довольно часто, но вам все равно нужно вызвать commit, чтобы обеспечить запись данных на диск и fsynced, таким образом безопасный.

Elasticsearch решает эту "проблему", добавляя журнал транзакций на сегмент (фактически индекс lucene), где хранятся операции записи, которые еще не были зафиксированы. Журнал транзакций является fsynced и безопасным, таким образом, вы получаете долговечность в любой момент времени, даже для документов, которые еще не были зафиксированы. Вы можете искать по документам в режиме реального времени, поскольку обновление происходит автоматически каждую секунду, и вы также можете быть уверены, что если что-то плохое случится журнал транзакций может быть воспроизведен для восстановления в конечном итоге потерянных документов. Хорошая вещь о журнале транзакций является то, что он может быть использован внутренне для других вещей, например, чтобы обеспечить в режиме реального времени получить код.

An Elasticsearch в флаш эффективно запускает фиксацию lucene и опустошает также журнал транзакций, поскольку после фиксации данных на уровне lucene долговечность может быть гарантирована самим lucene. Flush также представлен как api и может быть подправили, хотя обычно в этом нет необходимости. Сброс происходит автоматически в зависимости от того, сколько операций добавляется в журнал транзакций, насколько они велики и когда произошел последний сброс.

обновление приводит к записи нового сегмента, поэтому он становится доступным для поиска.

флаш вызывает в Lucene совершить, чтобы это произошло. Это намного дороже.

для получения более подробной информации, я написал статью, которая охватывает некоторые из этого: Elasticsearch снизу вверх :)