Практика оптимизации запросов Elasticsearch (1)
Практика оптимизации запросов Elasticsearch (1)
Язык кода:js
копировать
#Пример запроса пользователя
ПОЛУЧИТЬ index_v1/_search
{
  «от»: 0,
  «размер»: 10,
  "запрос": {
    "бул": {
      "нельзя": [
        {
          "бул": {
            "должен": [
              {
                "бул": {
                  "должен": [
                    {
                      "существует": {
                        "поле": "deleted_at",
                        "ускорение": 1
                      }
                    }
                  ],
                  «adjust_pure_negative»: правда,
                  "ускорение": 1
                }
              },
              {
                "срок": {
                  "удалено": {
                    «значение»: правда,
                    "ускорение": 1
                  }
                }
              }
            ],
            «adjust_pure_negative»: правда,
            "minimum_should_match": "1",
            "ускорение": 1
          }
        }
      ],
      «adjust_pure_negative»: правда,
      "ускорение": 1
    }
  },
  «версия»: правда,
  "сортировать": [
    {
      "создано_at": {
        "заказ": "описание"
      }
    }
  ],
  "агрегации": {
    "groupCurrency": {
      "условия": {
        "field": "order_currency",
        «размер»: 10,
        «min_doc_count»: 1,
        «shard_min_doc_count»: 0,
        «show_term_doc_count_error»: ложь,
        "заказ": [
          {
            "_count": "дескриптор"
          },
          {
            "_key": "по возрастанию"
          }
        ]
      },
      "агрегации": {
        "общий": {
          "value_count": {
            "поле": "идентификатор"
          }
        },
        "PaymentAmountTotal": {
          "сумма": {
            "field": "pay_amount"
          }
        },
        "actualPaymentAmountTotal": {
          "сумма": {
            "field": "actual_paid_amount"
          }
        },
        "serviceFeeTotal": {
          "сумма": {
            "field": "service_fee"
          }
        },
        "couponAmountTotal": {
          "сумма": {
            "field": "order_platform_coupon_discount"
          }
        }
      }
    }
  }
}

DSL-анализ:

Индекс пользователя — это индекс сценария обновления, который будет генерировать определенное количество сегментов doc.deleted и других.

В логическом запросе пользователь выполняет фильтрацию данных, чтобы определить, должно ли существовать поле delete_at или значение удаленного поля истинно, и отменяет must_not в наборе результатов. В то же время указывается «minimum_should_match»: «1», чтобы ограничить одновременное выполнение двух предложений в этом логическом запросе.

Тип поля Aggregations в основном Scaled_float, а Scaling_factor установлен на 100.

Тип Scaled_float — это тип данных, масштабируемый на основе чисел длинного типа.

Преимущества этого типа: он позволяет более точно считать десятичные дроби и экономить дисковое пространство, поскольку целые числа легче сжимать, чем числа с плавающей запятой;

Необходимо указать коэффициент масштабирования. При индексировании ES исходное значение будет умножено на коэффициент масштабирования и округлено для получения нового значения. Это новое значение сохраняется внутри ES, но возвращаемый результат по-прежнему является исходным значением. Преимущество использования коэффициентов масштабирования заключается в том, что целые числа легче сжимать, чем типы с плавающей запятой, что позволяет экономить дисковое пространство.

Уведомление: Атрибут scaling_factor доступен только для типа данных Scaled_float. Не используйте этот атрибут для других типов.

Например: значение поля a равно 0,1. Если тип поля a установлен на Scaled_float, а Scaling_factor установлен на 100, значение будет сохранено как целое число 0,1*100 во время хранения.

Используйте профиль для анализа времени запроса,В основном все вBooleanQueryиaggregationsэтап,Фаза агрегирования занимает много времени; в основном много времени занимают подсчет и суммирование.

Поля, используемые при агрегировании, не имеют типов ключевых слов, поэтому не возникает проблем с медленным выполнением запросов или снижением производительности, вызванным слишком большим количеством агрегаций из-за полей с высокой кардинальностью.

Примечание о глобальных порядковых номерах для полей с высокой мощностью:

Глобальный порядковый номер используется для выполнения агрегирования терминов в поле ключевого слова; es не знает, какие поля будут использоваться/не использоваться для агрегирования терминов, поэтому глобальный порядковый номер можно загрузить в память, когда это необходимо, определив при сопоставлении неожиданный глобальный номер = true; введите таким образом Глобальный порядковый номер будет загружен во время обновления;

Точки оптимизации:

1. Рекомендуется использовать тип ключевого слова для длинного типа при сопоставлении (изменение длинного на ключевое слово зависит от сценария. Если у клиента много запросов диапазона на основе этого поля, его не следует менять. Если у клиента много ключевых запросов, рекомендуется изменить).

2. Сегментов слишком много и они небольшие. Рекомендуется сделать принудительное слияние.

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

Язык кода:js
копировать
PUT /_cluster/settings
{
persistent": {
 "search.composite_aggregations.use_global_ordinal": false
 }
}

Примечание. По умолчанию es строит полные global_ordinals индекса 1 (по сути, прямой индекс) для каждой агрегации. Он используется для кэширования, чтобы ускорить следующую агрегацию. Новые записи приведут к тому, что кеш станет недействительным, а следующая. запрос запустит полную сборку. карта сообщает es напрямую использовать значение, полученное в результате запроса для агрегации, чтобы избежать процесса построения глобального порядкового номера;

Новая запись представляет собой новый сегмент, старый сегмент не изменился, и порядковое отношение каждого сегмента не изменилось, поэтому отношение сопоставления между глобальной порядковой записью и порядковым номером старого сегмента не должно меняться, если новое. добавленный сегмент выполняется быстрее, первым. Это окажет некоторое влияние на первый запрос, но если вы не используете глобальные порядковые номера, рекомендуется, чтобы мощность поля не была слишком большой;

Обновления индекса на основе пользователей происходят относительно часто. Итоговые рекомендации:

1. Объединить сегменты

Язык кода:js
копировать
POST index_name/_forcemerge?max_num_segments=1

2. Закройте следующие параметры

Язык кода:txt
копировать
"search.composite_aggregations.use_global_ordinal": false
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose