Обновить против флеш
Если новый документ индексируется в индекс Elasticsearch, то он доступен для поиска примерно через 1 секунду после операции индексирования. Однако он может быть вынужден сделать этот документ доступным для поиска немедленно, позвонив _flush
или _refresh
операция на индекс. В чем разница между этими двумя операциями - результат для них кажется одинаковым, документ сразу же доступен для поиска.
что конкретно делает каждая из этих операций?
документация ES кажется, не решать эту проблему глубоко.
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 снизу вверх :)