#Пример запроса пользователя
ПОЛУЧИТЬ 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"
}
}
}
}
}
}
Индекс пользователя — это индекс сценария обновления, который будет генерировать определенное количество сегментов 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. Чтобы каждый раз не создавать глобальный порядковый номер, вы можете отключить этот параметр (отказ от использования глобального порядкового номера будет занимать больше памяти)
PUT /_cluster/settings
{
persistent": {
"search.composite_aggregations.use_global_ordinal": false
}
}
Примечание. По умолчанию es строит полные global_ordinals индекса 1 (по сути, прямой индекс) для каждой агрегации. Он используется для кэширования, чтобы ускорить следующую агрегацию. Новые записи приведут к тому, что кеш станет недействительным, а следующая. запрос запустит полную сборку. карта сообщает es напрямую использовать значение, полученное в результате запроса для агрегации, чтобы избежать процесса построения глобального порядкового номера;
Новая запись представляет собой новый сегмент, старый сегмент не изменился, и порядковое отношение каждого сегмента не изменилось, поэтому отношение сопоставления между глобальной порядковой записью и порядковым номером старого сегмента не должно меняться, если новое. добавленный сегмент выполняется быстрее, первым. Это окажет некоторое влияние на первый запрос, но если вы не используете глобальные порядковые номера, рекомендуется, чтобы мощность поля не была слишком большой;
POST index_name/_forcemerge?max_num_segments=1
"search.composite_aggregations.use_global_ordinal": false