elasticsearchで "store": "yes "が必要な理由とは?
質問
私は本当に理解できないのですが、なぜ コアタイプのリンク には、属性の説明で (たとえば数値の場合) こう書かれているのですが、これはなぜなのでしょうか。
- store - 実際のフィールドをインデックスに格納する場合は yes、格納しない場合は no に設定します。デフォルトは no です(注。 の場合、JSONドキュメント自体は保存され、そこから取得することができます。 )
- index - 値をインデックス化しない場合は、no に設定します。この場合、インデックスされずに保存されるのであれば、storeはyesに設定されるべきです。 を使用することはできません。
太字の2つの部分が矛盾しているように見えます。もし
"index":"no", "store":"no"
でもソースから値を取得することができますね。これは、例えばURLを含むフィールドがある場合、良い使い方ができるかもしれません。そうでしょうか?
私はちょっとした実験をしました。2つのマッピングがあり、1つはフィールドに
"store":"yes"
に設定し、もう一方では
"store":"no"
.
どちらの場合も、私はまだ私のクエリで指定することができました。
{"query":{"match_all":{}}, "fields":["my_test_field"]}
と入力すると、フィールドを返して同じ答えが返ってきました。
と思ったのですが、もし
"store"
が設定されている場合
"no"
に設定されている場合、特定のフィールドを取得することができず、全体の
_source
を取得し、クライアント側でそれをパースする必要があります。
では
"store"
を
"yes"
? のフィールドを除外する場合のみ関係するのでしょうか?
"_source"
フィールドから明示的に除外する場合のみですか?
どのように解決するのですか?
store"が"no"に設定されている場合、特定のフィールドを取得できないと思っていました。 特定のフィールドを取得することはできず、_source 全体を取得し、クライアント側で解析する必要があります。 クライアント側でパースする必要があります。
これはまさにelasticsearchが、フィールドが格納されていない場合(デフォルト)、そして
_source
フィールドが有効な場合 (これもデフォルト)。
通常、elasticsearchにフィールドを送信するのは、そのフィールドで検索するか、またはそれを取得したいからです。しかし、フィールドを明示的に保存せず、ソースを無効にしない場合でも、フィールドを検索するために
_source
. つまり、インデックス化も保存もされないフィールドを持つことが、実際に意味を持つ場合もあるということです。
フィールドを保存する場合、それは基礎となる lucene で行われます。Lucene は転置インデックスであり、高速な全文検索を可能にし、テキストクエリで与えられたドキュメント ID を返します。Lucene は転置インデックスの他に、ドキュメント ID を指定して検索するためのフィールド値を格納するストレージを備えています。通常、検索結果として返したいフィールドを lucene に格納します。Elasticsearchは、デフォルトで送信されたすべてのドキュメントを保存するため、返したいすべてのフィールドを保存する必要はありません。
いくつかのケースでは、lucene に明示的にフィールドを保存しておくと便利なことがあります。
_source
フィールドが無効な場合や、elasticsearch が自動的にパースする場合でもパースを避けたい場合です。
しかし、保存された多くのフィールドを lucene から取得する場合、フィールドごとにディスクシークが必要になる可能性があることを覚えておいてください。
_source
を取得し、必要なフィールドを取得するためにそれをパースすることは、1回のディスクシークで済み、ほとんどの場合においてより高速になります。
関連
-
[解決済み] elasticsearchが特定のフィールドのみを返すようにするか?
-
[解決済み] ElasticSearchからデータを削除する
-
[解決済み] フィルタリングされた]に[クエリ]が登録されていません。
-
[解決済み] Elasticsearch 2.0でリモートアクセス/リクエストを有効にするにはどうすればよいですか?
-
[解決済み] Logstashとelasticsearchの間のデータブローカー/メッセージングシステムとして、RedisとRabbitMQの比較
-
[解決済み] elasticsearchノードを停止/シャットダウンする方法は?
-
[解決済み] リフレッシュとフラッシュ
-
ElasticSearch起動エラー - デフォルトの検出設定が実運用に適さない。
-
Elasticsearchの全ドキュメントをダンプする
-
ElasticSearchで全ての_idを取得する効率的な方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] フィルタリングされた]に[クエリ]が登録されていません。
-
[解決済み] Elasticsearch 2.0でリモートアクセス/リクエストを有効にするにはどうすればよいですか?
-
[解決済み] Logstashとelasticsearchの間のデータブローカー/メッセージングシステムとして、RedisとRabbitMQの比較
-
[解決済み] elasticsearchノードを停止/シャットダウンする方法は?
-
[解決済み] Elasticsearch 2.1: 結果ウィンドウが大きすぎる (index.max_result_window)
-
[解決済み] ESクラスタの設定方法は?
-
[解決済み] Elasticsearchのドキュメントからフィールドを削除する
-
ElasticSearch起動エラー - デフォルトの検出設定が実運用に適さない。
-
Kibana - ログをテーブルとして表示する方法
-
複数フィールドによるマッチングを行うクエリ