Elasticsearch для разработчиков: индексирование, анализ, поиск и агрегирование данных
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабынан сөз тіркестері  Elasticsearch для разработчиков: индексирование, анализ, поиск и агрегирование данных

Иван Б.
Иван Б.дәйексөз келтірді3 ай бұрын
Оптимизация типов числовых полей Чтобы оптимизировать использование диска в Elasticsearch, важно выбрать подходящий числовой тип данных для их эффективного хранения. Используя наименьший достаточный тип для размещения данных, можно минимизировать использование дискового пространства и повысить общую производительность. Для целочисленных значений подойдут типы byte, short, integer и long. Если данные попадают в диапазон меньшего типа, достаточно использовать его, а не больший. Точно так же для значений с плавающей точкой можно выбрать тип float, double или half_float в зависимости от точности, требуемой для данных.
Комментарий жазу
Иван Б.
Иван Б.дәйексөз келтірді3 ай бұрын
Отключение позиций для текстовых полей По умолчанию Elasticsearch хранит информацию о позициях для текстовых полей, которая используется для фразовых запросов и оценки релевантности на основе близости. Однако если по определенному полю фразовые запросы не требуются, информацию о позициях можно отключить, чтобы оптимизировать использование диска. Вот пример: 1. PUT indexname 2. { 3. "mappings": { 4. "properties": { 5. "color": { 6. "type": "text", 7. "index_options": "freqs" 8. } 9. } 10. } 11. В примере выше мы установили для свойства "index_options" поля "color" значение "freqs". Это отключает информацию о позиции, но при этом сохраняет информацию о частоте терминов. Это может быть полезно, если для поля не требуются фразовые запросы
Комментарий жазу
Иван Б.
Иван Б.дәйексөз келтірді3 ай бұрын
Отключение норм для текстовых полей Нормы используются для расчета оценки релевантности документа при полнотекстовом поиске. Однако в некоторых сценариях оценка по определенным текстовым полям не требуется. Для таких полей нормы можно отключить, чтобы оптимизировать использование диска. Вот пример: 1. PUT indexname 2. { 3. "mappings": { 4. "properties": { 5. "color": { 6. "type": "text", 7. "norms": false 8. } 9. } 10. } 11. } В запросе выше мы установили значение false для свойства "norms" поля "color", это означает, что оценка по этому полю не требуется. Отключение норм позволяет сэкономить дисковое пространство и повысить производительность индексирования
Комментарий жазу
Иван Б.
Иван Б.дәйексөз келтірді3 ай бұрын
Отключение индексации полей Не все поля в документах нужно индексировать. Иногда достаточно только хранить и извлекать их значения, не выполняя при этом операций поиска или фильтрации. Для таких полей индексирование можно отключить с помощью параметра "index". Вот пример: 1. PUT indexname 2. { 3. "mappings": { 4. "properties": { 5. "product_code": { 6. "type": "integer", 7. "index": false 8. } 9. } 10. } 11. } В примере выше мы определяем маппинг для поля "product_code" и устанавливаем для свойства "index" значение false. Оно сообщает Elasticsearch, что индексировать это поле не требуется, что экономит дисковое пространство и снижает накладные расходы на индексирование
Комментарий жазу
Иван Б.
Иван Б.дәйексөз келтірді3 ай бұрын
Увеличение количества реплик Чтобы повысить производительность поиска в кластере Elasticsearch, можно увеличить количество реплик для данного индекса. Для обработки операций поиска Elasticsearch использует как первичный шард, так и шарды реплик. Увеличивая количество реплик, мы эффективно задействуем больше узлов для поиска
Комментарий жазу
Иван Б.
Иван Б.дәйексөз келтірді3 ай бұрын
Принудительное слияние индексов, доступных только для чтения Для дальнейшего повышения производительности поиска можно использовать концепцию объединения шардов, доступных только для чтения, в один сегмент внутри индекса. Объединяя в один сегмент шарды, доступные только для чтения, мы получаем более простую и эффективную структуру данных для операций поиска. Эта оптимизация особенно эффективна для индексов, основанных на времени, в которые нельзя добавлять новые документы после завершения текущего интервала. Поскольку такие индексы обычно доступны только для чтения, к ним можно смело применять операцию принудительного слияния. Примечание Принудительное слияние не следует выполнять для индекса, который открыт для записи или будет открыт в ближайшее время, так как это может привести к нежелательным последствиям.
Комментарий жазу
Иван Б.
Иван Б.дәйексөз келтірді3 ай бұрын
Однако в некоторых сценариях требуется поиск по нескольким полям. В таких случаях Elasticsearch предлагает решение, позволяющее копировать значения нескольких полей в одно поле. Для этого используется директива copy_to. Рассмотрим пример с двумя полями: first_name и last_name. Чтобы применить поисковый запрос к обоим полям, используем директиву copy_to для создания копии значений полей в другом поле, например name. Вот пример маппинга: 1. PUT user_details 2. { 3. "mappings": { 4. "properties": { 5. "name": { 6. "type": "text" 7. }, 8. "first_name": { 9. "type": "text", 10. "copy_to": "name" 11. }, 12. "last_first": { 13. "type": "text", 14. "copy_to": "name" 15. } 16. } 17. } 18. }
Комментарий жазу
Иван Б.
Иван Б.дәйексөз келтірді3 ай бұрын
Для оптимизации производительности индексирования рекомендуется увеличить интервал обновления (refresh_ interval). Этого можно добиться, изменив параметр index.refresh_interval либо в файле конфигурации Elasticsearch, либо на каждом уровне индекса с помощью запроса. Для сценариев, предусматривающих массовое индексирование, рекомендуется установить более высокий интервал, например 30 секунд или более, чтобы избежать частого обновления индекса каждую секунду. Увеличение интервала обновления позволяет значительно повысить производительность индексирования.
Комментарий жазу
Иван Б.
Иван Б.дәйексөз келтірді3 ай бұрын
Еще один важный аспект, который следует учитывать, — это конфигурация шардов. Распределение данных по нескольким шардам позволяет распараллелить операции индексирования и поиска, что повышает производительность. Однако чтобы избежать чрезмерных накладных расходов и нехватки ресурсов, необходимо найти баланс между количеством шардов и аппаратными ресурсами
Комментарий жазу
Иван Б.
Иван Б.дәйексөз келтірді3 ай бұрын
Шаблон поиска Давайте разберем концепцию шаблонов поиска на примере. • Определение шаблона поиска. Рассмотрим сценарий, в котором требуется найти документы в индексе "userdetails" на основе заданного возрастного диапазона. Для этого можно создать шаблон поиска. 1. POST _scripts/search_template 2. { 3. "script": { 4. "lang": "mustache", 5. "source": { 6. "query": { 7. "range": { 8. "age": { 9. "gte": "{{min_age}}", 10. "lte": "{{max_age}}" 11. } 12. } 13. } 14. } 15. } 16. } В этом примере мы определяем шаблон поиска с помощью POST-запроса к конечной точке '_ scripts/search_template’. Шаблон написан на языке шаблонов Mustache.
Комментарий жазу