English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В Elasticsearch поиск выполняется с использованием запросов на основе JSON. Запрос состоит из двух предложений-
Листовые предложения запроса — это предложения, соответствующие, терминам или диапазонам, которые ищут определенное значение в конкретном поле.
Комбинированные предложения запроса — это комбинация листовых предложений запроса и других комбинированных запросов, используемых для извлечения необходимой информации.
Elasticsearch поддерживает множество запросов. Запросы начинаются с ключевого слова запроса, затем включают условия и фильтры в виде объекта JSON. Ниже описаны различные типы запросов.
Это самый простой запрос; он возвращает все содержимое, оценка каждого объекта составляет 1.0.
POST /schools/_search { "query": { "match_all":{} } }
При выполнении上面的 кода мы получили следующие результаты-
{ "took": 7, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 } "hits": { "total": { "value": 2 "relation": "eq" } "max_score": 1.0 "hits": [] { "_index": "schools", "_type": "school", "_id": "5", "_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", "_type": "school", "_id": "4", "_score": 1.0, "_source": { "name": "City Best School", "description": "ICSE", "street": "West End", "city": "Meerut", "state": "UP", "zip": "250002", "location": [ 28.9926174, 77.692485 ], "fees": 3500, "tags": [ "fully computerized" ], "rating": "4.5" } } ] } }
Эти запросы используются для поиска полнотекстового контента, например, глав или статей новостей. Этот запрос работает на основе анализатора, связанного с конкретным индексом или документом. В этой главе мы будем обсуждать различные типы полнотекстовых запросов.
Этот запрос соответствует тексту или фразе,匹配 одним или несколькими полями.
POST /schools*/_search { "query": { "match": { "rating":"4.5" } } }
После выполнения上面的 кода, мы получили следующий ответ:
{ "took": 44, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 } "hits": { "total": { "value": 1, "relation": "eq" } "max_score": 0.47000363, "hits": [] { "_index": "schools", "_type": "school", "_id": "4", "_score": 0.47000363, "_source": { "name": "City Best School", "description": "ICSE", "street": "West End", "city": "Meerut", "state": "UP", "zip": "250002", "location": [ 28.9926174, 77.692485 ], "fees": 3500, "tags": [ "fully computerized" ], "rating": "4.5" } } ] } }
Этот запрос соответствует тексту или фразе,匹配 одним или несколькими полями.
POST /schools*/_search { "query": { "multi_match": { "query": "paprola", "fields": ["city", "state"] } } }
После выполнения上面的 кода, мы получили следующий ответ:
{ "took": 12, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 } "hits": { "total": { "value": 1, "relation": "eq" } "max_score": 0.9808292, "hits": [] { "_index": "schools", "_type": "school", "_id": "5", "_score": 0.9808292, "_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" } } ] } }
Этот запрос использует анализатор запросов и ключевое слово query_string.
POST /schools*/_search { "query": { "query_string":{ "query":"beautiful" } } }
После выполнения上面的 кода, мы получили следующий ответ:
{ "took": 60, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 } "hits": { "total": { "value": 1, "relation": "eq" } ………………………………….
Эти запросы в основном обрабатывают структурированные данные, такие как числа, даты и перечисления.
POST /schools*/_search { "query": { "term":{"zip":"176115"} } }
После выполнения上面的 кода, мы получили следующий ответ:
…………………………….. "hits": [ { "_index": "schools", "_type": "school", "_id": "5", "_score": 0.9808292, "_source": { "name": "Central School", "description": "CBSE Affiliation", "street": "Nagan", "city": "paprola", "state": "HP", "zip": "176115", "location": [ 31.8955385, 76.8380405 ], } } ] …………………………………………..
Этот запрос используется для поиска объектов с значениями в заданном диапазоне. Для этого нам нужны операторы, такие как,-
gte −больше или равно
gt −больше
lte −меньше или равно
lt −меньше
Например, рассмотрим следующий код,-
POST /schools*/_search { "query": { "range": { "rating": { "gte": 3.5 } } } }
После выполнения上面的 кода, мы получили следующий ответ:
{ "took": 24, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 } "hits": { "total": { "value": 1, "relation": "eq" } "max_score": 1.0 "hits": [] { "_index": "schools", "_type": "school", "_id": "4", "_score": 1.0, "_source": { "name": "City Best School", "description": "ICSE", "street": "West End", "city": "Meerut", "state": "UP", "zip": "250002", "location": [ 28.9926174, 77.692485 ], "fees": 3500, "tags": [ "fully computerized" ], "rating": "4.5" } } ] } }
Существуют и другие типы запросов по уровню терминов, например,-
Запрос существования −Если значение поля не пусто.
Запрос отсутствия −Это полностью противоположно запросу существования, который ищет объекты без конкретного поля или с пустым значением.
Запросы с подстановочными знаками или regexp −Этот запрос использует регулярное выражение для поиска шаблонов в объекте.
Эти запросы представляют собой набор различных запросов, которые объединяются彼此 через использование булевых операторов (например, и/или, или, не) или для различных индексов или с функциональными вызовами.
POST /schools/_search { "query": { "bool": { "must": { "term": { "state": "UP" } } "filter": { "term": { "fees": "2200" } } "minimum_should_match": 1, "boost": 1.0 } } }
После выполнения上面的 кода, мы получили следующий ответ:
{ "took": 6, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 } "hits": { "total": { "value": 0, "relation": "eq" } "max_score": null, "hits": [ ] } }
Эти запросы обрабатывают географические данные и географические объекты. Эти запросы помогают найти географические объекты附近学校或 любые другие географические объекты. Вам нужно использовать тип данных географического местоположения.
PUT /geo_example { "mappings": { "properties": { "location": { "type": "geo_shape" } } } }
После выполнения上面的 кода, мы получили следующий ответ:
{ "acknowledged": true, "shards_acknowledged": true, "index": "geo_example" }
Теперь мы опубликуем данные в созданный выше индекс.
POST /geo_example/_doc?refresh { "name": "Chapter One, London, UK", "location": { "type": "point", "coordinates": [11.660544, 57.800286] } }
После выполнения上面的 кода, мы получили следующий ответ:
{ "took": 1, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 } "hits": { "total": { "value": 2 "relation": "eq" } "max_score": 1.0 "hits": [] "_index": "geo_example", "_type": "_doc", "_id": "hASWZ2oBbkdGzVfiXHKD", "_score": 1.0, "_source": { "name": "Chapter One, London, UK", "location": { "type": "point", "coordinates": [ 11.660544, 57.800286 ] } } } }