1. flush 



elasticsearch의 flush는 메모리와 트랜잭션 로그를 디스크로 저장한다.


elasticsearch는 lucene을 의존한다. lucene의 색인(index) 작업은 fsync를 사용하는데, fsync가 비싼 비용이 있어서 lucene은 여러 세그먼트로 색인을 관리하고 있다. 

in memory buffer를 이용하여 sync 작업이 발생하면 fsync를 통해서 디스크에 저장한다.


curl -XPOST 'http://localhost:9200/myindex/_flush



2. refresh

refresh는 색인을 새로 고침의 의미가 있다. 즉, 검색이 되게 하는 (searchable)의 의미가 있다. 

refresh주기가 시간내 검색이 되느냐 안되는냐를 결정한다. (보통 1초를 사용)

참조로 elasticsearch 문서에서는 거의 실시간(near real time, NRT)라는 단어를 사용하고 있다. 

https://www.elastic.co/guide/en/elasticsearch/guide/current/near-real-time.html



만약 refresh 주기를 지정하지 않으면, 따로 호출을 주어 refresh를 임의로 호출하게 할 수 있다. 



curl -XPOST 'http://localhost:9200/myindex/order/_settings' -d '{ "refresh_interval": -1 }'




curl -XPOST 'http://localhost:9200/myindex/order/_refresh'



참고로 flush와 refresh는 동시에 사용될 수 있다. 


curl -XPOST 'http://localhost:9200/myindex/_flush?refresh=True'




3. 최적화(optimization)


파편화된 세그먼트를 세그먼트를 줄이고 검색 성능을 빨리 하도록 하여 색인을 통합한다. 검색 성능을 높이는데 의미를 두고 있다.

lucene이 사용하지 않는 세그먼트와 다큐먼트를 정리하는 IO 작업을 통해서 검색을 빠르게 한다. 세그먼트 수를 최소화시킨다. 최소한의 파일에만 접근하도록 한다. 



$ curl -XPOST 'http://localhost:9200/myindex/_optimize'




최적화의 매개변수는 3개이다. 

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-optimize.html






Posted by '김용환'
,