Почему я вижу fielddata, когда doc_value включен в Aggregations? - PullRequest
0 голосов
/ 28 ноября 2018

На основе Эластичные документы , каждый тип, кроме текста (анализируемой строки), поддерживает doc_values, который, как я полагаю, при наличии должен полностью пропустить fielddata в Агрегации.

Однако этодля меня это не так, всякий раз, когда я делаю термин агрегация на основе типа keyword или ip, я вижу, что они загружаются как fieldata, хотя это не происходит для других типов (например, session_id какlong введите в этом случае)

Это правильное поведение?если это правда, как я могу предотвратить создание fielddata?

Я использую эластичный поиск 6.5, и это мое отображение

{
  "settings": {
    "index": {
      "number_of_shards": 2,
      "number_of_replicas": 0,
      "codec": "best_compression"
    }
  },
  "mappings": {
    "_doc": {
      "properties": {
        "time": {
          "type": "date",
          "format": "epoch_millis"
        },
        "session_token": {
          "type": "keyword"
        },
        "session_ref": {
          "type": "keyword"
        },
        "session_id": {
          "type": "long"
        },
        "src": {
          "type": "ip"
        },
        "version": {
          "type": "byte"
        }
      }
    }
  }
}

Это пример агрегации, который вызывает fielddataзагружено

GET test_ind/_search?size=0
  {
  "aggs" : {
    "by_token":{
      "terms":{ 
        "field": "token",
        "size": 100
      }
    }
  }
  }

, а здесь - состояние полевых данных после агрегирования

"test_ind" : {
  "uuid" : "DiB6d7EgSXm7jeiSgoo-mQ",
  "primaries" : {
    "fielddata" : {
      "memory_size_in_bytes" : 1564696,
      "evictions" : 0,
      "fields" : {
        "session_ref" : {
          "memory_size_in_bytes" : 0
        },
        "session_token" : {
          "memory_size_in_bytes" : 1564696
        }
      }
    }
  },
  "total" : {
    "fielddata" : {
      "memory_size_in_bytes" : 1564696,
      "evictions" : 0,
      "fields" : {
        "session_ref" : {
          "memory_size_in_bytes" : 0
        },
        "session_token" : {
          "memory_size_in_bytes" : 1564696
        }
      }
    }
  }
}

, а вот статистика сегментов

"test_ind" : {
  "uuid" : "DiB6d7EgSXm7jeiSgoo-mQ",
  "primaries" : {
    "segments" : {
      "count" : 8,
      "memory_in_bytes" : 472939,
      "terms_memory_in_bytes" : 423365,
      "stored_fields_memory_in_bytes" : 3504,
      "term_vectors_memory_in_bytes" : 0,
      "norms_memory_in_bytes" : 0,
      "points_memory_in_bytes" : 41598,
      "doc_values_memory_in_bytes" : 4472,
      "index_writer_memory_in_bytes" : 0,
      "version_map_memory_in_bytes" : 0,
      "fixed_bit_set_memory_in_bytes" : 0,
      "max_unsafe_auto_id_timestamp" : -1,
      "file_sizes" : { }
    }
  },
  "total" : {
    "segments" : {
      "count" : 8,
      "memory_in_bytes" : 472939,
      "terms_memory_in_bytes" : 423365,
      "stored_fields_memory_in_bytes" : 3504,
      "term_vectors_memory_in_bytes" : 0,
      "norms_memory_in_bytes" : 0,
      "points_memory_in_bytes" : 41598,
      "doc_values_memory_in_bytes" : 4472,
      "index_writer_memory_in_bytes" : 0,
      "version_map_memory_in_bytes" : 0,
      "fixed_bit_set_memory_in_bytes" : 0,
      "max_unsafe_auto_id_timestamp" : -1,
      "file_sizes" : { }
    }
  }
}

1 Ответ

0 голосов
/ 29 ноября 2018

Видимо Глобальные ординалы Использование памяти показано в fielddata.

Глобальные ординалы могут быть настроены либо как рыхлые, либо ленивые при отображении, так как первый вызоветзагружая их во время обновления, а последние во время запроса (по умолчанию)

, чтобы предотвратить использование глобальных ординалов в объединениях терминов, мы можем использовать "execution_hint": "map", что в моем случае будет:

GET test_ind/_search?size=0
  {
  "aggs" : {
    "by_token":{
      "terms":{ 
        "field": "token",
        "execution_hint": "map"
        "size": 100
      }
    }
  }
  }

хотя он имеет свои собственные предостережения, использует больше памяти для выполнения запросов и работает медленнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...