elasticsearch — возможен ли запрос нескольких индексов?

#elasticsearch

#elasticsearch

Вопрос:

У меня есть кластер elasticsearch с 3 индексами:

 /users/user
/events/visit
/events/register
/pages/page
 

Итак, теперь мне нужно запускать запросы, обрабатывающие несколько индексов.

Например: получить пол пользователей, зарегистрированных на странице X. (Чтобы получить эту информацию, мне нужна информация из нескольких индексов.)

Возможно ли это? Может быть, интеграция hadoop?

Ответ №1:

Это довольно просто в самом Elasticsearch! В любое время, когда вы хотите указать индекс, вы можете разделять дополнительные индексы запятой.

 curl -XGET 'http://localhost:9200/index1,index2/_search?q=yourQueryHere'
 

Вы также можете выполнить поиск по всем индексам с помощью _all .

 curl -XGET 'http://localhost:9200/_all/_search?q=yourQueryHere'
 

Вот несколько полезных документов с веб-сайта elasticsearch. На этом сайте много информации, но иногда ее немного сложно найти, IMO.

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-index.html

Комментарии:

1. Я нашел информацию о том, что _all будет устаревшим ( elastic.co/guide/en/elasticsearch/reference/current /… ) , но я не уверен, что у эластичного поиска есть несколько применений для «_all», так что, возможно, это подделка new: D, пожалуйста, обновите свой ответ @brian-mego если вы что-то знаете об этом

2. можем ли мы сделать это для диапазона дат, такого как CURL -XGET ‘ localhost:9200/index_2018-12- {15-25}/_search’ означает, что я хотел выбрать только данные из индекса от 15 до 25, не более, иначе у меня есть индекс для каждого дня.

3. @IndrajeetGour, в документе » Соглашения для нескольких индексов » говорится, что он поддерживает подстановочные знаки, такие как * и - , но в нем не упоминается диапазон

4. вы можете создать псевдоним и привязать к нему все индексы. запросите псевдоним и получите все соответствующие документы.

5. @Brian Можем ли мы ограничить результат на основе индекса. Предположим, нам нужны 5 лучших результатов по индексу1 и 5 лучших результатов по индексу2. Можем ли мы достичь этого с помощью эластичного поиска?

Ответ №2:

Не ограничивая наш поиск определенным индексом или типом, мы выполнили поиск по всем документам в кластере. Elasticsearch перенаправил запрос поиска параллельно основному или реплике каждого сегмента в кластере.

        1)/users,events,pages/_search : Search all types in the users,events and pages

       2)/u*,e*,p*/_search : Search all types in any indices beginning with u,e or beginning with p

       3)/events/visit,register/_search : Search types visit and register in the events index

       4) /_all/user,visit,register,page/_search : Search types users,events and pages in specified indices
 

Ответ №3:

Можно выполнить поисковый запрос по нескольким индексам:

например:

 curl -X POST 
'http://localhost:9200/test1,test2/_search?pretty=' 
-H 'Content-Type: application/json' -d '{
    "query": {
    ...
    }
}
'