Сообщения

Сообщения за май, 2021

Агрегации в Elasticsearch

Изображение
Агрегирование суммирует ваши данные в виде показателей, статистики или другой аналитики. Агрегации помогут вам ответить на такие вопросы, как: Каково среднее время загрузки моего веб-сайта? Кто мои самые ценные клиенты с учетом объема транзакций? Что будет считаться большим файлом в моей сети? Сколько товаров находится в каждой товарной категории? Elasticsearch разбивает агрегаты на три категории: Агрегаты показателей, которые вычисляют показатели, такие как сумма или среднее значение, на основе значений полей. Агрегаты сегментов, которые группируют документы в сегменты (buckets), также называемые ячейками (bins), на основе значений полей, диапазонов или других критериев. Конвейерные агрегаты, которые принимают входные данные из других агрегатов вместо документов или полей. Запустить агрегацию Вы можете запускать агрегаты как часть поиска, указав параметр aggs API поиска. Следующий поиск запускает агрегацию терминов в my-field: GET /my-index-000001/_search { "a

Запросы на уровне термина в Elasticsearch: запрос набора терминов (terms_set)

Изображение
Возвращает документы, содержащие минимальное количество точных терминов в указанном поле. Запрос terms_set аналогичен запросу terms, за исключением того, что вы можете определить количество совпадающих терминов, необходимых для возврата документа. Например: Поле programming_languages содержит список известных языков программирования, таких как c++, java или php для кандидатов на работу. Вы можете использовать запрос terms_set для возврата документов, которые соответствуют как минимум двум из этих языков. Поле permissions содержит список возможных разрешений пользователя для приложения. Вы можете использовать запрос terms_set для возврата документов, которые соответствуют подмножеству этих разрешений. Пример запроса Настройка индекса В большинстве случаев вам нужно будет включить отображение числового поля в свой индекс, чтобы использовать запрос terms_set. Это числовое поле содержит количество совпадающих терминов, необходимых для возврата документа. Чтобы узнать, как настроит

Запросы на уровне термина в Elasticsearch: terms запрос

Изображение
Возвращает документы, содержащие один или несколько точных терминов в указанном поле. Запрос terms такой же, как term запрос, за исключением того, что вы можете искать несколько значений. Пример запроса Следующий поиск возвращает документы, в которых поле user.id содержит kimchy или elkbee. GET /_search { "query": { "terms": { "user.id": [ "kimchy", "elkbee" ], "boost": 1.0 } } } Параметры верхнего уровня для terms запроса field (Обязательный, объект) Поле для поиска. Значение этого параметра представляет собой массив терминов, которые вы хотите найти в указанном поле. Чтобы вернуть документ, один или несколько терминов должны точно соответствовать значению поля, включая пробелы и заглавные буквы. По умолчанию Elasticsearch ограничивает количество запросов до 65536 терминов. Вы можете изменить это ограничение с помощью параметра index.max_terms_count. Чтобы использовать значения полей сущ

Запросы на уровне термина в Elasticsearch: term запрос

Изображение
Возвращает документы, содержащие точный термин в указанном поле. Вы можете использовать term запрос для поиска документов на основе точного значения, такого как цена, идентификатор продукта или имя пользователя. Избегайте использования term запроса для текстовых полей. По умолчанию Elasticsearch изменяет значения текстовых полей как часть анализа. Это может затруднить поиск точных совпадений для значений текстовых полей. Для поиска значений текстового поля используйте вместо этого match запрос. Пример запроса GET /_search { "query": { "term": { "user.id": { "value": "cat", "boost": 1.0 } } } } Параметры верхнего уровня для term запроса field (Обязательный, объект) Поле для поиска. Параметры для field value (Обязательный, строка) Термин, который вы хотите найти в указанном поле field. Чтобы вернуть документ, термин должен точно соответствовать значению поля, включая пробе

Запросы на уровне термина в Elasticsearch: fuzzy запрос

Изображение
Возвращает документы, содержащие термины, похожие на поисковый запрос, измеряемый расстоянием редактирования Левенштейна. Расстояние редактирования - это количество изменений одного символа, необходимых для преобразования одного термина в другой. Эти изменения могут включать: Смена символа (box → fox) Удаление символа (black → lack) Вставка символа (sic → sick) Перемещение двух соседних символов (act → cat) Чтобы найти похожие термины, fuzzy запрос создает набор всех возможных вариантов или расширений поискового термина в пределах указанного расстояния редактирования. Затем запрос возвращает точные совпадения для каждого раскрытия. Примеры запросов Простой запрос GET /_search { "query": { "fuzzy": { "user.id": { "value": "act" } } } } Пример использования дополнительных параметров GET /_search { "query": { "fuzzy": { "user.id": { "

Запросы на уровне термина в Elasticsearch: exists запрос

Изображение
Возвращает документы, содержащие индексированное значение для поля. Индексированное значение может не существовать для поля документа по ряду причин: Поле в исходном JSON равно null или [] Поле имеет "index" : false установленное в сопоставлении (mapping) Длина значения поля превышает параметр ignore_above в сопоставлении (mapping) Значение поля было искажено, и в сопоставлении (mapping) было определено ignore_malformed GET /_search { "query": { "exists": { "field": "user" } } } Параметры верхнего уровня для exists field (Обязательный, строка) Имя поля, в котором вы хотите выполнить поиск. Хотя поле считается несуществующим, если значение JSON равно null или [], эти значения будут указывать на то, что поле действительно существует: Пустые строки, такие как "" или "-" Массивы, содержащие null и другое значение, например [null, "foo"] Пользовательское нулевое значение, о

Запросы на уровне термина в Elasticsearch

Изображение
Вы можете использовать запросы на уровне терминов для поиска документов на основе точных значений в структурированных данных. Примеры структурированных данных включают диапазоны дат, IP-адреса, цены или идентификаторы продуктов. В отличие от полнотекстовых запросов, запросы на уровне терминов не анализируют условия поиска. Вместо этого запросы на уровне терминов соответствуют точным терминам, хранящимся в поле. Запросы на уровне терминов по-прежнему нормализуют условия поиска для полей ключевых слов с помощью свойства normalizer. Типы запросов на уровне терминов exists запрос Возвращает документы, содержащие любое проиндексированное значение для поля. fuzzy запрос Возвращает документы, содержащие термины, похожие на поисковый запрос. Elasticsearch измеряет сходство или нечеткость, используя расстояние редактирования Левенштейна. ids запрос Возвращает документы на основе их идентификаторов документов. prefix запрос Возвращает документы, содержащие определенный префикс в у

Составные запросы в Elasticsearch: запрос максимальной разобщенности

Изображение
Возвращает документы, соответствующие одному или нескольким запросам в оболочке, которые называются предложениями или предложениями запроса. Если возвращенный документ соответствует нескольким предложениям запроса, запрос dis_max присваивает документу наивысшую оценку релевантности из любого предложения соответствия, а также приращение разрыва связи для любых дополнительных совпадающих подзапросов. Вы можете использовать dis_max для поиска термина в полях, отображаемых с разными коэффициентами значимости. GET /_search { "query": { "dis_max": { "queries": [ { "term": { "title": "Quick pets" } }, { "term": { "body": "Quick pets" } } ], "tie_breaker": 0.7 } } } Параметры верхнего уровня для dis_max queries (Обязательный, массив объектов запроса). Содержит одно или несколько предложений запроса. Возвращенные документы должны соответств

Контроль конкурентности в PostgreSQL

Изображение
PostgreSQL предоставляет разработчикам богатый набор инструментов для управления одновременным доступом к данным. Внутренне согласованность данных поддерживается за счет использования многоверсионной модели (Multiversion Concurrency Control, MVCC). Это означает, что каждый оператор SQL видит моментальный снимок данных (версию базы данных), каким он был некоторое время назад, независимо от текущего состояния базовых данных. Это предотвращает просмотр операторами несогласованных данных, созданных параллельными транзакциями, выполняющими обновления одних и тех же строк данных, обеспечивая изоляцию транзакций для каждого сеанса базы данных. MVCC, избегая методологий блокировки традиционных систем баз данных, сводит к минимуму конфликт блокировок, чтобы обеспечить приемлемую производительность в многопользовательских средах. Основное преимущество использования модели управления параллелизмом MVCC, а не блокировки, заключается в том, что в MVCC блокировки, полученные для запроса (чтения) да

Транзакции и аномалии конкурентности в базах данных

Изображение
Транзакции - это уровень абстракции базы данных, который позволяет приложению делать вид, что определенных проблем параллелизма и определенных видов аппаратных и программных сбоев не существует. Большой класс ошибок сводится к простому прерыванию транзакции, и приложению просто нужно повторить попытку. Транзакции помогают предотвратить много видов проблем. Не все приложения подвержены всем этим проблемам: приложение с очень простыми шаблонами доступа, такими как чтение и запись только одной записи, вероятно, может обойтись без транзакций. Однако для более сложных шаблонов доступа транзакции могут значительно сократить количество потенциальных случаев ошибок. Без транзакций различные сценарии ошибок (сбои процессов, сбои в работе сети, перебои в подаче электроэнергии, заполнение диска, неожиданный параллелизм и т. д.) означают, что данные различными путями могут стать непоследовательными. Например, денормализованные данные могут легко рассинхронизироваться с исходными данными. Без тр

Составные запросы в Elasticsearch: запрос с постоянной оценкой

Изображение
Оборачивает запрос фильтра и возвращает каждый соответствующий документ с оценкой релевантности, равной значению параметра повышения. GET /_search { "query": { "constant_score": { "filter": { "term": { "user.id": "kimchy" } }, "boost": 1.2 } } } Параметры верхнего уровня для constant_score filter (Обязательный, объект запроса) Фильтрует запрос, который вы хотите выполнить. Все возвращенные документы должны соответствовать этому запросу. Запросы фильтрации не вычисляют оценки релевантности. Чтобы повысить производительность, Elasticsearch автоматически кэширует часто используемые запросы фильтрации. boost (Необязательный, float) Число с плавающей запятой, используемое в качестве постоянной оценки релевантности для каждого документа, соответствующего запросу фильтра. По умолчанию 1.0. Читайте также: Контекст запроса и фильтрации в Elasticsearch Составные запросы в

Составные запросы в Elasticsearch: повышающие (boosting) запросы

Изображение
Возвращает документы, соответствующие положительному запросу, при этом снижая оценку релевантности документов, которые также соответствуют отрицательному запросу. Вы можете использовать повышающий (boosting) запрос, чтобы понизить рейтинг определенных документов, не исключая их из результатов поиска. GET /_search { "query": { "boosting": { "positive": { "term": { "text": "apple" } }, "negative": { "term": { "text": "pie tart fruit crumble tree" } }, "negative_boost": 0.5 } } } Верхнеуровневые параметры для boosting positive (Обязательный, объект запроса) Запрос, который вы хотите выполнить. Все возвращенные документы должны соответствовать этому запросу. negative (Обязательный, объект запроса) Запрос, используемый для уменьшения оценки релевантности совпадающих документов.

Составные запросы в Elasticsearch: логический (boolean) запрос

Изображение
Запрос, который сопоставляет документы, соответствующие логическим комбинациям других запросов. Запрос bool отображается в Lucene BooleanQuery. Он построен с использованием одного или нескольких логических предложений, каждое из которых имеет типизированное вхождение. Типы событий: must Предложение (запрос) должно появляться в соответствующих документах и вносить вклад в оценку. filter Предложение (запрос) должно появиться в соответствующих документах. Однако, в отличие от must, оценка запроса будет проигнорирована. Предложения фильтра выполняются в контексте фильтра, что означает, что оценка игнорируется, а предложения рассматриваются для кэширования. should Предложение (запрос) должно (следует) появиться в соответствующем документе. must_not Предложение (запрос) не должно появляться в соответствующих документах. Пункты выполняются в контексте фильтра, что означает, что оценка игнорируется, а предложения рассматриваются для кэширования. Поскольку оценка игнорируется, для всех

Составные запросы в Elasticsearch

Изображение
Составные запросы охватывают другие составные или конечные запросы, чтобы объединить их результаты и оценки, изменить их поведение или переключиться с запроса на контекст фильтра. Запросы в этой группе: bool запрос Запрос по умолчанию для объединения нескольких предложений конечных или составных запросов, как must, should, must_not или filter. Пункты must и should объединяют свои оценки - чем больше предложений соответствия, тем лучше - в то время как предложения must_not и filter выполняются в контексте фильтра. boosting запрос Возвращает документы, соответствующие положительному запросу, но уменьшает оценку документов, которые также соответствуют отрицательному запросу. constant_score запрос Запрос, который включает другой запрос, но выполняет его в контексте фильтра. Всем совпадающим документам присваивается одинаковая "постоянная" _score. dis_max запрос Запрос, который принимает несколько запросов и возвращает любые документы, соответствующие любому из предложени

Контекст запроса и фильтрации в Elasticsearch

Изображение
Оценка релевантности По умолчанию Elasticsearch сортирует совпадающие результаты поиска по оценке релевантности, которая измеряет, насколько хорошо каждый документ соответствует запросу. Оценка релевантности - это положительное число с плавающей запятой, возвращаемое в поле метаданных _score поискового API. Чем выше _score, тем релевантнее документ. Хотя каждый тип запроса может вычислять оценки релевантности по-разному, расчет оценки также зависит от того, выполняется ли предложение запроса в контексте запроса или фильтра. Контекст запроса В контексте запроса предложение запроса отвечает на вопрос "Насколько хорошо этот документ соответствует этому предложению запроса?" Помимо определения соответствия документа, предложение запроса также вычисляет оценку релевантности в поле метаданных _score. Контекст запроса действует всякий раз, когда предложение запроса передается параметру запроса, например параметру запроса в API поиска. Контекст фильтра В контексте фильтра пред