GET /_search
{
"query": {
"match": {
"message": {
"query": "this is a test",
"operator": "and"
}
}
}
}Введение в язык запросов Query DSL
Язык запросов Query DSL (Domain Specific Language) основан на синтаксисе JSON.
Существуют следующие типы запросов:
Leaf query – поиск определенных значений в определенном поле;
Compound query – составные запросы, используются для логического объединения нескольких запросов.
Полнотекстовые запросы позволяют осуществлять поиск по анализируемым текстовым полям. Выделяют следующие основные виды полнотекстовых запросов:
Match query – возвращает документы, которые соответствуют указанному тексту, числу, дате или логическому значению;
Match phrase query – возвращает документы, которые соответствуют указанной фразе); в отличие от match query, в данном запросе строка интерпретируется как единое целое "this is a test";
Query string – возвращает документы на основе строки запроса, используя синтаксический анализатор со строгим синтаксисом); запрос использует синтаксис для анализа и разделения строки запроса на основе аналитиков "AND" и "OR"; затем независимо анализируется каждая разделенная часть текста.
Основными параметрами в запросе Match query являются:
field– поле, по значениям которого осуществляется поиск;query– текст, число, дата или логическое значение, которое нужно найти в выбранном поле;operator– один из логических аналитиков "AND" и "OR" (по умолчанию); при использовании аналитика "AND" запрос интерпретирует строку "this is a test" как "this AND is AND a AND test"; при использовании аналитика "OR" - как "this OR is OR a OR test":
Основным параметром в запросе Match phrase query является: field – поле, по значениям которого осуществляется поиск:
GET /_search
{
"query": {
"match_phrase": {
"message": "this is a test"
}
}
}Основными параметрами в запросе Query string query являются:
query– строка запроса, которая используется для поиска;default_field– поле, по значениям которого осуществляется поиск:
GET /_search
{
"query": {
"query_string": {
"query": "(new york city) OR (big apple)",
"default_field": "content"
}
}
}Сложные запросы позволяют объединять более простые или другие сложные запросы и выводить обобщенные результаты. Среди них можно выделить тип запросов Bool.
Bool query – запрос, который осуществляет поиск с использованием логической комбинации других запросов. Запрос строится с использованием одного или нескольких логических предложений, каждое из которых имеет типизированное вхождение:
must– предложение должно появляться в документах;filter– предложение должно появляться в документах;must_not– предложение не должно появляться в документах;should– предложение может появляться в документах:
GET _search
{
"query": {
"bool": {
"must": {
"term": { "user": "Admin" }
},
"filter": {
"term": { "tag": "tech" }
},
"must_not": {
"range": {
"age": { "gte": 10, "lte": 20 }
}
},
"should": [
{ "term": { "tag": "wow" } },
{ "term": { "tag": "opensearch" } }
]
}
}
}Прежде чем сохранить запрос, пользователь может просмотреть полный его код и проверить заполненность полей. Для этого можно использовать следующие ресурсы:
Запросы такого типа используются для поиска документов на основе точных значений в структурированных данных.
Выделяют следующие основные виды запросов на уровне терминов:
exists query – возвращает документы, которые содержат индексированное значение в указанном поле;
range query – возвращает документы, которые содержат значения в указанном диапазоне;
regexp query – возвращает документы, содержащие значения, соответствующие регулярному выражению;
term query – возвращает документы, которые содержат точное значение в указанном поле, не рекомендуется использовать для поиска по текстовым полям;
terms query – аналогичен term query, возвращает документы, содержащие одно или несколько точных значений в указанном поле;
wildcard – возвращает документы, содержащие значения, соответствующие указанному шаблону; в шаблоне аналитик "*" соответствует 0 и более символов, аналитик "?" соответствует одному любому символу.
Основным параметром в запросе Exists query является: field – поле, которое необходимо найти:
GET /_search
{
"query": {
"exists": {
"field": "user"
}
}
}Основными параметрами в запросе Range query являются:
field– поле, по значениям которого осуществляется поиск;gt– аналитик "больше";gte– аналитик "больше или равно";lt– аналитик "меньше";lte– аналитик "меньше или равно":
GET _search
{
"query": {
"range": {
"age": {
"gte": 10,
"lte": 20
}
}
}
}Основными параметрами в запросе Regexp query являются:
field– поле, по значениям которого осуществляется поиск;value– регулярное выражение для поиска значений:
GET /_search
{
"query": {
"regexp": {
"user": {
"value": "A.*n"
}
}
}
}Основными параметрами в запросе Term query являются:
field– поле, по значениям которого осуществляется поиск;value– значение, которое нужно найти в выбранном поле:
GET /_search
{
"query": {
"term": {
"user": {
"value": "Admin"
}
}
}
}Основным параметром в запросе Terms query является: field – поле, по значениям которого осуществляется поиск:
GET /_search
{
"query": {
"terms": {
"user": ["Admin ", "User"]
}
}
}Основными параметрами в запросе Wildcard query являются:
field– поле, по значениям которого осуществляется поиск;value– шаблон запроса, по которому нужно найти значение в выбранном поле:
GET /_search
{
"query": {
"wildcard": {
"user": {
"value": "Ad*n"
}
}
}
}Была ли эта страница полезной?
Спасибо за отзыв!
Спасибо, мы учтём это для улучшения документации.