0

100 億のドキュメントがあります。ドキュメントの 1 つのフィールドはタイムスタンプ (ミリ秒) であり、インデックス作成時に次のマッピングが使用されます。

  timestamp:
    type: "date"
    format: "YYYY-MM-dd HH:mm:ss||YYYY-MM-dd HH:mm:ss.SSS"
    ignore_malformed: true
    doc_values: true

検索するときは、範囲フィルターを使用します。doc_value を使用しているため、レンジフィルターは内部的に逆インデックスを使用して検索します。それはある種の遅さです。

The execution option controls how the range filter internally executes. 
The execution option accepts the following values:
index: Uses the field’s inverted index in order to determine whether documents fall within the specified range.

マッピングを別の方法で変更した場合、つまり、時間/秒/ミリ秒の代わりに日を使用します。

  day:
    type: "date"
    format: "YYYY-MM-dd"
    ignore_malformed: true
    doc_values: true

検索するときは、範囲フィルターを使用すると高速です。

パフォーマンスが異なる理由を誰かが説明できますか。

最初のもの(秒/ミリ秒を使用)、逆インデックス(内部的には一種のハッシュテーブルであると想定)には膨大な数のキーがあります。2 つ目 (使用日のみ) では、逆インデックスのキーははるかに少なくなります。それが理由ですか?

4

1 に答える 1

1

あなたの仮定は正しいです。日付の時間コンポーネントがインデックス化されていない場合、一意の値の数は少なくなります。範囲クエリを実行する場合、Elasticsearch はより少ない数の投稿リストを「ループ」する必要があるため、パフォーマンスの向上が見られます。

于 2015-05-17T02:41:52.320 に答える