Как прочитать только один индекс и установить другой как запись при поиске псевдонима в ElasticSearch 7.6? - PullRequest
0 голосов
/ 23 апреля 2020

Я знаю, что можно определить два индекса в псевдониме, где один индекс имеет is_write_index, установленный на true, а другой имеет значение false -

POST /_aliases
{
    "actions" : [
        {
            "add" : {
                 "index" : "test_index_1",
                 "alias" : "my_alias",
                 "is_write_index": true
            }
        }
    ]
}
POST /_aliases
{
    "actions" : [
        {
            "add" : {
                 "index" : "test_index_2",
                 "alias" : "my_alias",
                 "is_write_index": false
            }
        }
    ]
}

Как вы видите, я определил два индекса test_index_1 и test_index_2, где первый является индексом записи, а второй нет.

Теперь я хочу иметь возможность запросить my_alias таким образом, что поиск происходит только на test_index_2, для которого is_write_index установлено на false, а я записываю данные в test_index_1 вместо чтения из обоих индексов, что является поведением по умолчанию. То есть, я не sh результаты поиска приходят из индекса, где is_write_index установлен на true.

Возможно ли это? Я попытался установить index.blocks.read в true в индексе записи, но тогда поисковые запросы по псевдониму завершаются с ошибкой. Вместо этого я sh считываю запрос псевдонима только из того индекса, для которого is_write_index имеет значение false.

Как этого добиться?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Это может быть достигнуто с помощью отфильтрованных псевдонимов .

. Таким образом, вы применяете пользовательский фильтр при добавлении индекса записи к псевдониму. Свойство filter определяет условие bool, в соответствии с которым данные фильтруются по этому индексу и представляются как новое представление набора данных в этом индексе. Все поисковые запросы по этому индексу выполняются в этом новом представлении, которое создает Elasti c. Поэтому, если вы хотите избежать чтения из индекса, в который вы в данный момент пишете, примените фильтр, который никогда не будет удовлетворен ко всем документам в вашем наборе данных, или фильтр exists для некоторого фиктивного поля.

POST /_aliases
{
    "actions": [
    {
        "add": {
            "index": "test_index_2",
            "alias": "my_alias",
            "is_write_index": true,
            "filter": {
                "bool": {
                    "must_not": {
                        "exists": {
                            "field": "<field_that_always_exists_in_your_documents>"
                        }
                    }
                }
            }
        }
    }
    ]
}

После завершения записи данных обновите псевдоним, удалив свойство filter, чтобы разрешить чтение из обоих индексов.

0 голосов
/ 24 апреля 2020

Вы используете эту функцию неправильно. Если вы используете псевдоним для поиска, он всегда будет пытаться прочитать все основные индексы. is_write_index предоставляется в качестве функции для поддержки шаблонов ролловера и индекса, где записи происходят по 1 индексу, но чтения происходят по всем индексам с одинаковым псевдонимом или шаблоном индекса.

Если вы хотите загружать данные в один индекс, но разрешить приложению продолжать чтение из старого индекса, когда идет загрузка данных, вы должны использовать 2 отдельных псевдонима - один для чтения и один для записи, а для устройства - стратегия обмена псевдонимами, указывающими на индексы, после завершения загрузки данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...