Разница в результатах поиска RediSearch

Я использую Redis вместе с модулями RedisJSON и RediSearch. У меня есть вопрос о модуле RediSearch, особенно о FT.SEARCH.

Мой индекс выглядит так:

FT.CREATE chainIdIdx ON JSON PREFIX 1 chain-id. SCHEMA $.message-ids.*.redis-routing-key AS routingkeys TAG $.updated-at AS updatedAt TEXT SORTABLE

На данный момент существует более 2 миллионов записей ключей с префиксом chain-id.*

Вот поисковые запросы:

1.) Взгляните на первый вызов:

FT.SEARCH "chainIdIdx" * SORTBY updatedAT DESC LIMIT 0 2

результат поиска: всего найдено 182299 документов.

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

Почему есть разница? Я ожидал, что будет такая же сумма и тот же результат. Другое дело, что должны отображаться самые новые ключи базы данных, которые будут (прямо сейчас) с помощью значения updatedAt, такого как 2022-12-01 xx:xx:xx.

Ключи правильно хранятся в базе данных, но результат поиска отличается от ожидаемого.

Я попытался поиграть с установкой индекса по-другому, но это ухудшило ситуацию. Также я не уверен, связано ли это с конфигурацией или каким-либо ограничением, потому что количество ключей огромно и будет расти.

1 ответ

Время поиска истекло, и он возвращает то, что было найдено до сих пор. По умолчанию время ожидания установлено на 500 мс. Вы можете изменить это поведение и время ожидания с помощью команды FT.CONFIG, изменив файл redis.conf и несколькими другими способами. Я покажу вам, как это сделать с помощью команд Redis, но вы можете — и, вероятно, захотите — прочитать все подробности сами.

Чтобы изменить значение тайм-аута, просто укажите новое значение в миллисекундах:

      redis.cloud> FT.CONFIG.SET TIMEOUT 1000

Установка его на 0 отключает тайм-аут.

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

      redis.cloud> FT.CONFIG.SET ON_TIMEOUT FAIL

Если вы хотите вернуть значение по умолчанию и просто вернуть то, что было получено до сих пор:

      redis.cloud> FT.CONFIG.SET ON_TIMEOUT RETURN

Надеюсь это поможет!

Другие вопросы по тегам