目次
※この記事は次のブログを翻訳したものになります。
原文:Elasticsearch 1.5.0 Released
本日(3/23)、Lucene 4.10.4ベースのElasticsearch 1.5.0 をリリースしました。 このリリースはElasticsearchの最新の安定バージョンとなります。 多くのresiliency(復元性、弾力性) enhancementとバグフィックスを含んでおり、 すべてのユーザにアップグレードを推奨しています。
すべての変更についてはdownload Elasticsearch 1.5.0 hereをごらんください。
460PRという大量の変更を含む本リリースは、Elasticsearchをよりresilient(弾力のあるもの)にするために 費やされています。
Inner hits
本リリースで追加された、Elasticsearchに最もリクエストされたものの一つがinner hitsです。
これは、has_child
もしくはnested
クエリにマッチした子のドキュメントを、各親ドキュメントと一緒に返すことができます。
例えば、blog
という親ドキュメントとcomment
という子ドキュメントを持っているとします。
この時、“full text search"というコメントを持ったブログ記事を検索したいとします。
GET /my_index/blog/_search
{
"query": {
"has_child": {
"type": "comment",
"score_mode": "sum",
"query": {
"match": {
"body": "full text search"
}
}
}
}
}
上記のリクエストは、親のblog
ドキュメントを返します。
しかし、どのコメントが関係しているのかはわかりません。
関連しているコメントを検索して親ごとにグルーピングするために、
少し手間のかかる2回目のクエリを実行する必要があります。
Inner hitsがこれを変えてくれます。
inner_hits
パラメータを次のように、上記のクエリに追加するだけです!
GET /my_index/blog/_search
{
"query": {
"has_child": {
"type": "comment",
"score_mode": "sum",
"query": {
"match": {
"body": "full text search"
}
},
"inner_hits": {}
}
}
}
検索結果の各blog
記事に、inner_hits
という項目があり、そこに検索にヒットしたコメントの
上位3件(デフォルト値)が返ってきます。
...
"hits": [
{
"_index": "my_index",
"_type": "blog",
"_id": 1,
"_score": 3.68,
"_source": { ... },
"inner_hits": {
"comment": {
"total": 16,
"hits": [
{
"_type": "comment",
"_id": 5,
"_score": 2.79,
"_source": {
"body": "Full text search is the bomb"
}
},
{ ... },
{ ... }
]
}
}
}
]
...
inner_hits
部分は、第2の検索リクエストに似ています。
size
やfrom
パラメータを含めるくことで、挙動をカスタマイズできます。
また、検索から想像するであろう、ページネーション、ソート、ハイライト、_source
フィルタリングなどといった機能もサポートします。
Inner hitsはparent-childおよび、nested
ドキュメントをサポートします。
この機能は、現時点ではexperimental
ラベルが付与されています。
このラベルは、この機能が将来変更されたり、削除されたりする可能性があるかもしれないことを意味します。
詳細については、Inner Hits documentationをごらんください。
Shadow replicas
Elasticsearchはそれ自身の冗長性に常に気をつけています。 それは、レプリカシャード(各プライマリシャードの冗長なコピー)を持っています。 これは、プライマリシャードを失った時に、データをロスしないようにするためのものです。 レプリカシャードはまた、検索のスループットをスケールアウトするためにも利用できます。 多くのレプリカ(ノードを伴うことで。)はスループットを増加させます。
しかし、ユーザによってはElsticsearchを分散ファイルシステム上でホスティングしており、すでに、 ファイルシステムがレプリケーションと冗長性を担当しています。 ファイルシステムが同じことしているので、各シャードのコピーを複数持つことはあまり意味がありません。
Shadowレプリカはノードを追加することによる検索スループットをスケールアウトすることが、 余分なストレージやインデキシングのコストを払うことなく、可能になります。 代わりに、各シャドーレプリカはプライマリシャードを持っている共有ファイルシステムにread-onlyでアクセスします。 Shadowレプリカは定期的にファイルシステムのビューをリフレッシュし、プライマリシャードのどんな変更も検知するでしょう。
プライマリシャードが失敗したら、Shadowレプリカがプライマリに昇格し、 失敗したプライマリによって書き込まれたトランザクションログを読み込みリプレイできます。
この機能はexperimentalマークが付いています。詳細についてはShadow Replicas documentationをごらんください。
Resiliency improvements
Elasticsearch 1.1 から 1.3では、インデックスのすべてのファイルのチェックサムを追加し、 それらのファイルが壊れているかどうかをチェックするために利用することにフォーカスしました。 1.4では、Zen discoveryと分散モデルについて大きな改良を加えました。
これらの変更にともなう、より詳細な統計情報やより詳細なロギングがElasticsearchやLuceneの以前のバージョンに存在した 未知の問題を明るみに出しました。 Elasticsearch 1.5.0では、これらの問題の多くに対処しています。
-
ElasticsearchとLuceneの以前のバージョンにあるバグがインデックスの故障を引き起こしていました。
チェックサムコードのおかげで、これらを発見できました。現在は、Elasticsearchの起動時に自動的にLucene3.x
(Elasticsearch 0.20.x以前)が作成したセグメントを検知して、シャードをオープンする前に、新しいフォーマットを使って、 新しいコミットポイントを書き出します。(#9899) -
1.3.xもしくは以前のバージョンからローリングアップグレードは、ローカルのシャードデータを再利用しようとせずに、
シャード全体をコピーしようとします。1.3.2と以前のバージョンが実行されているノードからローリングアップグレードすることは 圧縮をオフにしない限りできなくなりました。(#9925)
1.3.xやそれ以前のバージョンからアップグレードする場合、ローリングアップデートする代わりにクラスタの再起動を考えたほうがいいかもしれません。 -
非同期環境は予測することが難しいです。時に、最も予測していないことが起きるからです。
シャード配置、リカバリ、削除のコードの多くが単純化され、状態変更をよりアトミックで決定的にするための変更によりリファクタリングされました。
(#8720, #9799, #9784, #9801, #9083, #8579, #8436, #8092, #9902, #6644, #8350, #9770, #9616, #9439, #8350, #8494) -
同様に、変更はクラスタ状態の更新が常に前進するということを確実にしました。更新の受け取り順序が順不同であったり、
マスターだったノードからの更新を受け取った場合に混乱させていました。 (#9632, #9541, #9503) -
チェックサムとチェックサムのバリデーションの強化(#8723,
#8599, #8587, #8407, #8010, #8018) -
disk threshold allocation deciderを速く(#8803)、賢く(#7785)、自動化(#8270)
-
auto-generated IDの利用時のインデキシングのスピードアップのためのに追加された最適化を除去。
たまにドキュメントを重複して登録するため(#7729)
Download now
ぜひ、Elasticsearch 1.5.0をダウンロードして、試してみてください。 そして、感想をTwitter(@elastic)などで教えて下さい。 また、問題がありましたら、GitHub issues pageで報告をお願いします。
comments powered by Disqus
See Also by Hugo
- Elasticsearchの新しいJavaクライアント(2024年3月版)
- 機械学習による検索ランキング改善ガイドを読みました
- ElasticsearchのアーキテクチャとStateless / Serverless
- Elasticsearchの新しいJavaクライアント
- ElasticのWorkplace Searchを触ってみる - その2 - インストールと起動