1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Elasticsearchで検索が可能になるまでに行われていること

Last updated at Posted at 2020-03-20

3行にまとめると...

  • リクエストされたドキュメントをメモリに蓄積して
  • 一定量溜まったらセグメントと呼ばれる単位にまとめたあとに
  • 検索用オブジェクトに反映される。

インデックス可能になるまでに行われていること

1. メモリバッファにドキュメントを蓄積

インデックスリクエストを受けたあと、すぐに格納されるわけではない。
メモリバッファに蓄積され、一定のドキュメント数が蓄積するかメモリバッファがいっぱいになると後述の格納処理が行われる。

2. セグメントへの格納 & マージ

Elasticsearch内部では全文検索ソフトウェアのLuceneが使用されており、
ドキュメント情報はLucene内部で セグメント と呼ばれる領域に分割して格納される。
ただし、この時点ではまだドキュメントを検索することはできない、

セグメントはサイズが一定を超えると複数のセグメントとマージされ、さらに大きいセグメントとなる。
このマージが繰り返されセグメントのサイズが大きくなっていく。
その様子をビジュアライズしたのが以下の動画。
http://blog.mikemccandless.com/2011/02/visualizing-lucenes-segment-merges.html

3. Elasticsearchのrefreshを行い、検索用オブジェクトに反映

Luceneでドキュメントを検索可能な状態にするためには、 reopen という操作を行い検索用オブジェクトに反映する必要がある。
Elasticsearchのrefresh操作を行うと内部的にreopen操作が行われ、ドキュメントが検索可能な状態となる。

refresh間隔の設定

refresh間隔はデフォルトで 1秒 で行われる。
要件次第ではこの1秒が適切でないことがあり、 index.refresh_interval というプロパティを用いて任意の値に設定を行うこともできる。

要件ごとの設定については以下の記事が参考になる。
https://www.elastic.co/guide/en/elasticsearch/reference/7.0/tune-for-indexing-speed.html#_unset_or_increase_the_refresh_interval

参考資料

Elasticsearch実践ガイド (impress top gear)

Elasticsearchの内部的な仕組み、運用方法など、非常にわかりやすい書籍。
本記事で説明した内容についてももっと詳しく記載されている。
Elasticsearchを実践導入するのであれば一度は読んでおきたい。
https://www.amazon.co.jp/dp/4295003913/

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?