Elasti c Поиск с использованием нескольких индексов и маршрутизации - PullRequest
1 голос
/ 21 февраля 2020

У меня есть настройка кластера Elasti c, так что есть определенные индексы c для определенного набора документов с идентификатором 1234, так что индекс будет index_2020_02_1234 для документов для клиента 1234 в феврале, но также есть index_2020_02_OTHER для документов для другие клиенты, так как клиент 1234 имеет большинство документов. Для «ДРУГИХ» индексов у нас есть маршрутизация с использованием идентификатора клиента.

Я хотел бы выполнить поиск по всем индексам для нескольких клиентов, например, для клиентов 1234 и 5678.

Поскольку индексы для клиента 1234 этого не делают Я не могу использовать маршрутизацию. Я не могу использовать поиск по заданным значениям c, т. е. / index_2020_02_1234, index_2020_02_OTHER / _search? routing = 5678, так как у index_2020_02_1234 нет маршрутизации.

Мне было интересно, есть ли способ создать тело поискового запроса, чтобы сделать это, чтобы я мог вызвать конечную точку / _search?

Я знаю, что вы можете иметь:

"query": {
    "terms": {
        "_index": ["index_2020_02_1234", "index_2020_02_OTHER"] 
    }
}

и

"query": {
    "terms": {
        "_routing": ["5678"] 
    }
}

Мне нужна комбинация _index и _routing в запросе. Возможно ли это?

Будет ли что-то вроде работы:

"query": {
    "bool": {
        "should": [
            {
                "terms": {
                    "_index": ["index_2020_02_1234"] 
                }
            },
            {
                "terms": {
                    "_index": ["index_2020_02_1234"],
                    "_routing": ["5678"]
                }
            }
        ]
    }
}

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Возможно, вы можете добавить один и тот же псевдоним к обоим индексам, чтобы можно было выполнять поиск по псевдониму вместо имени индекса.

Оформить заказ Elasticsearch API псевдонима индекса

В вашем В этом случае вы можете индексировать данные всех пользователей в один и тот же индекс, а затем создать псевдоним пользователя для поиска указанного c пользователя.

0 голосов
/ 25 февраля 2020

Мне удалось найти решение, основанное на запросе:

{
  “query”: {
    “bool”: {
      "should": [
        {
            "terms": {
                "_index": [
                    "index_2020_02_1234",
                    "index_2020_01_1234"
                ]
            }
        },
        {
             "bool": {
                "must": [
                    {
                        "terms": {
                            "_index": [
                                "index_2020_02_OTHER",
                                "index_2020_01_OTHER"
                            ]
                        }
                    },
                    {
                        "terms": {
                            "_routing": [
                                5678,
                                9012
                        ]
                    }
                ]
             }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...