Облицовка Index Not Found периодически в запросе N1QL

Вариант использования: при поиске «MAYUR» результаты появляются в поиске, но если я ищу «MAY» или «MA», результатов нет. Я реализовал поиск, который выполняет поиск по startWith("MAY%"). Я использую версии кушетки 4.6.3-4136-E.

Сообщение об ошибке выглядит следующим образом:

org.springframework.data.couchbase.core.CouchbaseQueryExecutionException:
Невозможно выполнить запрос из-за следующих ошибок n1ql:
{"msg":"Индекс не найден - причина: queryport.indexNotFound","code": 12016}
{"msg":"Индекс не найден - причина: queryport.indexNotFound","code":12016}
{"msg":"Индекс не найден - причина: queryport.indexNotFound","code ":12016}
{"msg":"Индекс не найден - причина: queryport.indexNotFound","code":12016}

Версия Java SDK: 2.5.5

Периодически сталкиваюсь с этой проблемой.

Код для запуска запроса

public <T> PageImpl<T> runQuery(final Statement statement, final Expression expression, final String alias,
        final Pageable pageable, final Class<T> tClazz) {
    PageImpl<T> tPage = null;
    try {
        CompletableFuture<List<T>> entityFuture = CompletableFuture
                .supplyAsync(() -> findByN1QLProjection(statement, tClazz)).exceptionally(th -> {
                    logger.write(new Exception(th.getMessage(), th));
                    return Collections.emptyList();
                });
        CompletableFuture<Long> countFuture = CompletableFuture.supplyAsync(() -> doCount(expression, alias))
                .exceptionally(th -> {
                    logger.write(new Exception(th.getMessage(), th));
                    return 0L;
                });
        CompletableFuture.allOf(entityFuture, countFuture).get();
        tPage = new PageImpl<>(entityFuture.get(), pageable, countFuture.get());
    } catch (final InterruptedException | ExecutionException ex) {
        logger.write(ex);
        tPage = new PageImpl<>(Collections.emptyList(), pageable, 0);
    }
    return tPage;
}

person ThatMan    schedule 30.03.2018    source источник
comment
Что ты пытаешься сделать? Вам необходимо предоставить более подробную информацию, если вы хотите, чтобы кто-то помог вам отладить ваш код.   -  person divibisan    schedule 30.03.2018
comment
@divibisan какая еще информация вам нужна?   -  person ThatMan    schedule 30.03.2018
comment
Я не могу сказать, так как я не знаю Java или Couchbase, но я знаю по опыту, что чем яснее будет ваш вопрос и чем больше контекста вы предоставите, тем больше вероятность, что вы получите полезный ответ.   -  person divibisan    schedule 30.03.2018
comment
Какие индексы вы создали?   -  person Matthew Groves    schedule 31.03.2018


Ответы (1)


Основная причина: неверный план выполнения был кэширован службой запросов и впоследствии использовался, а из-за недоступности идентификатора индекса (поскольку индексы были созданы заново) запрос продолжал выдавать ошибку: «Индекс не найден».

Решение. После очистки сохраненных подготовленных планов запрос заработал.

person ThatMan    schedule 11.04.2018