Под поиском понимается поиск документов в индексе или нескольких индексах. Простой поиск представляет собой запрос GET API к конечной точке _search. Поисковый запрос может быть задан как в строке запроса, так и в теле запроса.
Примеры
При поиске любых документов в этом индексе, если не указаны параметры поиска, каждый документ является хитом, и по умолчанию будет возвращено 10 хитов.
1 | GET my_documents/_search |
В ответ на поисковый запрос возвращается JSON-объект. Код ответа 200 означает, что запрос был успешно выполнен.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | { "took":1, "timed_out":false, "_shards":{ "total":2, "successful":2, "failed":0 }, "hits":{ "total":2, "max_score":1.0, "hits":[ "..." ] } } |
Примечания и полезные сведения
- Распределенный поиск - сложная задача, и каждый шард индекса должен быть прочесан на предмет совпадений, а затем эти совпадения объединены в единый отсортированный список в качестве окончательного результата.
- Поиск состоит из двух фаз: фазы запроса и фазы выборки.
- На этапе запроса запрос выполняется на каждом шарде локально, и лучшие хиты возвращаются на координирующий узел. Координационный узел объединяет результаты и создает глобальный отсортированный список.
- На этапе выборки координирующий узел получает реальные документы по идентификаторам хитов и возвращает их запрашивающему клиенту.
- Для выполнения фазы выборки координирующему узлу требуется достаточно памяти и процессора.