В Elasticsearch поиск выполняется с использованием запросов на основе JSON. Запрос состоит из двух пунктов:
-
Предложения Leaf Query — Эти предложения представляют собой соответствие, термин или диапазон, которые ищут определенное значение в определенном поле.
-
Составные предложения запросов — эти запросы представляют собой комбинацию конечных предложений запросов и других составных запросов для извлечения требуемой информации.
Предложения Leaf Query — Эти предложения представляют собой соответствие, термин или диапазон, которые ищут определенное значение в определенном поле.
Составные предложения запросов — эти запросы представляют собой комбинацию конечных предложений запросов и других составных запросов для извлечения требуемой информации.
Elasticsearch поддерживает большое количество запросов. Запрос начинается с ключевого слова запроса, а затем содержит условия и фильтры внутри в виде объекта JSON. Различные типы запросов были описаны ниже —
Совпадение всех запросов
Это самый простой запрос; он возвращает все содержимое и со счетом 1,0 для каждого объекта. Например,
POST http://localhost:9200/schools*/_search
Тело запроса
{ "query":{ "match_all":{} } }
отклик
{ "took":1, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0}, "hits":{ "total":5, "max_score":1.0, "hits":[ { "_index":"schools", "_type":"school", "_id":"2", "_score":1.0, "_source":{ "name":"Saint Paul School", "description":"ICSE Affiliation", "street":"Dawarka", "city":"Delhi", "state":"Delhi", "zip":"110075", "location":[28.5733056, 77.0122136], "fees":5000, "tags":["Good Faculty", "Great Sports"], "rating":"4.5" } }, { "_index":"schools_gov", "_type":"school", "_id":"2", "_score":1.0, "_source":{ "name":"Government School", "description":"State Board Affiliation", "street":"Hinjewadi", "city":"Pune", "state":"MH", "zip":"411057", "location":[18.599752, 73.6821995], "fees":500, "tags":["Great Sports"], "rating":"4" } }, { "_index":"schools", "_type":"school", "_id":"1", "_score":1.0, "_source":{ "name":"Central School", "description":"CBSE Affiliation", "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405], "fees":2200, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3" } }, { "_index":"schools_gov", "_type":"school", "_id":"1", "_score":1.0, "_source":{ "name":"Model School", "description":"CBSE Affiliation", "street":"silk city", "city":"Hyderabad", "state":"AP", "zip":"500030", "location":[17.3903703, 78.4752129], "fees":700, "tags":["Senior Secondary", "beautiful campus"], "rating":"3" } }, { "_index":"schools", "_type":"school", "_id":"3", "_score":1.0, "_source":{ "name":"Crescent School", "description":"State Board Affiliation", "street":"Tonk Road", "city":"Jaipur", "state":"RJ", "zip":"176114", "location":[26.8535922, 75.7923988], "fees":2500, "tags":["Well equipped labs"], "rating":"4.5" } } ] } }
Полнотекстовые запросы
Эти запросы используются для поиска по всему тексту, например по главе или новостной статье. Этот запрос работает в соответствии с анализатором, связанным с этим конкретным индексом или документом. В этом разделе мы обсудим различные типы полнотекстовых запросов.
Запрос на совпадение
Этот запрос сопоставляет текст или фразу со значениями одного или нескольких полей. Например,
POST http://localhost:9200/schools*/_search
Тело запроса
{ "query":{ "match" : { "city":"pune" } } }
отклик
{ "took":1, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0}, "hits":{ "total":1, "max_score":0.30685282, "hits":[{ "_index":"schools_gov", "_type":"school", "_id":"2", "_score":0.30685282, "_source":{ "name":"Government School", "description":"State Board Afiliation", "street":"Hinjewadi", "city":"Pune", "state":"MH", "zip":"411057", "location":[18.599752, 73.6821995], "fees":500, "tags":["Great Sports"], "rating":"4" } }] } }
запрос multi_match
Этот запрос соответствует тексту или фразе с более чем одним полем. Например,
POST http://localhost:9200/schools*/_search
Тело запроса
{ "query":{ "multi_match" : { "query": "hyderabad", "fields": [ "city", "state" ] } } }
отклик
{ "took":16, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0}, "hits":{ "total":1, "max_score":0.09415865, "hits":[{ "_index":"schools_gov", "_type":"school", "_id":"1", "_score":0.09415865, "_source":{ "name":"Model School", " description":"CBSE Affiliation", "street":"silk city", "city":"Hyderabad", "state":"AP", "zip":"500030", "location":[17.3903703, 78.4752129], "fees":700, "tags":["Senior Secondary", "beautiful campus"], "rating":"3" } }] } }
Query String Query
Этот запрос использует синтаксический анализатор запроса и ключевое слово query_string. Например,
POST http://localhost:9200/schools/_search
Тело запроса
{ "query":{ "query_string":{ "query":"good faculty" } } }
отклик
{ "took":16, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0}, "hits":{ "total":1, "max_score":0.09492774, "hits":[{ "_index":"schools", "_type":"school", "_id":"2", "_score":0.09492774, "_source":{ "name":"Saint Paul School", "description":"ICSE Affiliation", "street":"Dawarka", "city":"Delhi", "state":"Delhi", "zip":"110075", "location":[28.5733056, 77.0122136], "fees":5000, "tags":["Good Faculty", "Great Sports"], "rating":"4.5" } }] } }
Запросы на уровне семестра
Эти запросы в основном касаются структурированных данных, таких как числа, даты и электронные значения. Например,
POST http://localhost:9200/schools/_search
Тело запроса
{ "query":{ "term":{"zip":"176115"} } }
отклик
{ "took":1, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0}, "hits":{ "total":1, "max_score":0.30685282, "hits":[{ "_index":"schools", "_type":"school", "_id":"1", "_score":0.30685282, "_source":{ "name":"Central School", "description":"CBSE Affiliation", "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405], "fees":2200, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.3" } }] } }
Range Query
Этот запрос используется для поиска объектов, имеющих значения между диапазонами значений. Для этого нам нужно использовать такие операторы, как —
-
gte — больше чем равно
-
GT — больше, чем
-
lte — меньше чем равно
-
менее чем
gte — больше чем равно
GT — больше, чем
lte — меньше чем равно
менее чем
Например,
POST http://localhost:9200/schools*/_search
Тело запроса
{ "query":{ "range":{ "rating":{ "gte":3.5 } } } }
отклик
{ "took":31, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0}, "hits":{ "total":3, "max_score":1.0, "hits":[ { "_index":"schools", "_type":"school", "_id":"2", "_score":1.0, "_source":{ "name":"Saint Paul School", "description":"ICSE Affiliation", "street":"Dawarka", "city":"Delhi", "state":"Delhi", "zip":"110075", "location":[28.5733056, 77.0122136], "fees":5000, "tags":["Good Faculty", "Great Sports"], "rating":"4.5" } }, { "_index":"schools_gov", "_type":"school", "_id":"2", "_score":1.0, "_source":{ "name":"Government School", "description":"State Board Affiliation", "street":"Hinjewadi", "city":"Pune", "state":"MH", "zip":"411057", "location":[18.599752, 73.6821995] "fees":500, "tags":["Great Sports"], "rating":"4" } }, { "_index":"schools", "_type":"school", "_id":"3", "_score":1.0, "_source":{ "name":"Crescent School", "description":"State Board Affiliation", "street":"Tonk Road", "city":"Jaipur", "state":"RJ", "zip":"176114", "location":[26.8535922, 75.7923988], "fees":2500, "tags":["Well equipped labs"], "rating":"4.5" } } ] } }
Другие типы запросов на уровне терминов:
-
Запрос Exists — если определенное поле имеет ненулевое значение.
-
Отсутствующий запрос — это полностью противоположно существующему запросу, этот запрос ищет объекты без определенных полей или полей, имеющих нулевое значение.
-
Запрос с подстановочными знаками или регулярными выражениями — этот запрос использует регулярные выражения для поиска шаблонов в объектах.
Запрос Exists — если определенное поле имеет ненулевое значение.
Отсутствующий запрос — это полностью противоположно существующему запросу, этот запрос ищет объекты без определенных полей или полей, имеющих нулевое значение.
Запрос с подстановочными знаками или регулярными выражениями — этот запрос использует регулярные выражения для поиска шаблонов в объектах.
Тип запроса — документы с определенным типом. Например,
POST http://localhost:9200/schools*/_search
Тело запроса
{ "query":{ "type" : { "value" : "school" } } }
отклик
Все школьные объекты JSON присутствуют в указанных индексах.
Сложные Запросы
Эти запросы представляют собой набор различных запросов, объединенных друг с другом с использованием логических операторов, таких как и, или, нет, или для разных индексов, или с помощью вызовов функций и т. Д. Например,
POST http://localhost:9200/schools*/_search
Тело запроса
{ "query":{ "filtered":{ "query":{ "match":{ "state":"UP" } }, "filter":{ "range":{ "rating":{ "gte":4.0 } } } } } }
отклик
{ "took":16, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0}, "hits":{"total":0, "max_score":null, "hits":[]} }
Присоединение к запросам
Эти запросы используются там, где включено более одного сопоставления или документа. Существует два типа присоединяющихся запросов:
Вложенный запрос
Эти запросы имеют дело с вложенным отображением (вы узнаете об этом подробнее в следующей главе).
запросы has_child и has_parent
Эти запросы используются для получения дочернего или родительского документа, который получил совпадение в запросе. Например,
POST http://localhost:9200/tutorials/_search
Тело запроса
{ "query": { "has_child" : { "type" : "article", "query" : { "match" : { "Text" : "This is article 1 of chapter 1" } } } } }
отклик
{ "took":21, "timed_out":false, "_shards":{"total":5, "successful":5, "failed":0}, "hits":{ "total":1, "max_score":1.0, "hits":[{ "_index":"tutorials", "_type":"chapter", "_id":"1", "_score":1.0, "_source":{ "Text":"this is chapter one" } }] } }
Geo Queries
Эти запросы касаются географических местоположений и географических точек. Эти запросы помогают обнаружить школы или любой другой географический объект рядом с любым местоположением. Вам необходимо использовать тип данных Geo Point. Например,
POST http://localhost:9200/schools*/_search
Тело запроса
{ "query":{ "filtered":{ "filter":{ "geo_distance":{ "distance":"100km", "location":[32.052098, 76.649294] } } } } }
отклик
{ "took":6, "timed_out":false, "_shards":{"total":10, "successful":10, "failed":0}, "hits":{ "total":2, "max_score":1.0, "hits":[ { "_index":"schools", "_type":"school", "_id":"2", "_score":1.0, "_source":{ "name":"Saint Paul School", "description":"ICSE Affiliation", "street":"Dawarka", "city":"Delhi", "state":"Delhi", "zip":"110075", "location":[28.5733056, 77.0122136], "fees":5000, "tags":["Good Faculty", "Great Sports"], "rating":"4.5" } }, { "_index":"schools", "_type":"school", "_id":"1", "_score":1.0, "_source":{ "name":"Central School", "description":"CBSE Affiliation", "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115", "location":[31.8955385, 76.8380405], "fees":2000, "tags":["Senior Secondary", "beautiful campus"], "rating":"3.5" } } ] } }
Примечание. Если при выполнении вышеприведенного примера вы получили исключение, добавьте следующее сопоставление в свой индекс.