В этом посте мы рассмотрим поиск с помощью использования строк запроса в URI.
API строк запросов является мощным и содержит множество функций, поэтому я просто покажу вам основные и наиболее важные способы его использования. Если вам нужно полное описание API строк запросов, обратитесь к документации.
Для начала давайте напишем простой запрос. Я буду использовать индекс "ecommerce" и искать документы с типом продукта. Для выполнения поиска я буду использовать API _search, а поскольку я хочу искать по строке запроса, я добавлю параметр q. Значение этого параметра будет нашей строкой поиска. Для первого примера я просто хочу показать вам, как можно найти все документы типа продукта в индексе, что можно сделать, используя звездочку в качестве подстановочного знака. Это может быть полезно, если вы хотите иметь индекс всех документов, например.
1 | GET /ecommerce/product/_search?q=* |
Будет найдено 999 документов, что является общим числом документов в индексе.
Я уделю немного времени обсуждению важных частей результата. Внутри ключа hits есть два мета-свойства о результатах. Свойство total содержит количество совпавших результатов, а свойство max_score - наивысший балл из всех совпавших документов. Вложенное свойство hits содержит массив найденных документов. Для каждого документа можно увидеть мета-поля, которые мы обсуждали в предыдущем посте. Еще одно важное свойство - _score, которое представляет собой оценку, показывающую, насколько хорошо документ соответствует поисковому запросу. Это число основано на сложных математических расчетах, и сейчас вам не нужно знать об этом больше. Свойство _source содержит найденный документ в виде JSON, который мы добавили в индекс при добавлении документа.
Далее попробуем выполнить поиск конкретного значения, например, макарон.
1 | GET /ecommerce/product/_search?q=pasta |
По умолчанию поиск в строке запроса ищет по всем полям, если в запросе не указано одно или несколько полей. В данном примере мы ищем термин pasta в любом поле документа типа product в индексе ecommerce.
Мы также можем указать, какое поле должно содержать значение. Для этого мы добавляем название поля, затем двоеточие и затем значение.
1 | GET /ecommerce/product/_search?q=name:pasta |
Это означает, что мы ищем все продукты, в названии которых есть слово pasta. С нашими тестовыми данными это дает тот же результат, но если я изменю название поля на description, то вы увидите, что мы не получим ни одного совпадения.
1 | GET /ecommerce/product/_search?q=description:pasta |
Это были самые основы поиска с помощью строк запроса в Elasticsearch. В следующих заметках я расскажу о других возможностях, а затем перейду к обсуждению DSL запросов.