exists() depends on exact FT.INFO error wording; an unrecognised "missing index" message makes create() never create the index (regression from #672)
メンテナーはふだん 5 日以内に返信
@nandanadileep がすでに取り組んでいます。
2026年10月23日 から。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 75/100
調査の方向性
まず redisvl/exceptions.py の exists() と _MISSING_INDEX_ERROR_FRAGMENTS を読み、次にインデックスが存在しない場合と create() のテストを確認してください。issue に記載された Valkey の文言を再現し、インデックスが存在しない場合は exists() が False を返し、その他のエラーでは引き続き例外を発生させることを確認してください。その後 create() でインデックスを作成できることも確認してください。
索引モデルが issue の本文から書いたものです。
説明
Summary
Since #672 (released in 0.25.1), exists() decides whether an index is missing by matching the FT.INFO error text against _MISSING_INDEX_ERROR_FRAGMENTS. If a server words that error differently, exists() raises RedisSearchError instead of returning False, and because create() calls exists() first, the index is never created. Before #672, FT._LIST made the check independent of wording.
One server where this happens today is Valkey Search (tested on Amazon ElastiCache for Valkey 9.1.0), which replies Index with name '…' not found in database 0.
Cause
exists() treats an FT.INFO error as "missing index" only if it matches one of these, in redisvl/exceptions.py:
_MISSING_INDEX_ERROR_FRAGMENTS = (
"unknown index name",
"no such index",
"search_index_not_found",
"index not found",
)
Valkey Search words the error differently, so none of the fragments match and exists() re-raises:
FT.INFO no-such-index
(error) Index with name 'no-such-index' not found in database 0
("index not found" does not match because the index name sits between "index" and "not found".)
Before #672, exists() used FT._LIST, which works on Valkey, so this is a regression for Valkey users.
Reproduction
import asyncio
import redis.asyncio as redis
from redisvl.index import AsyncSearchIndex
async def main():
client = redis.Redis(host="<valkey-host>", port=6379) # Valkey + Valkey Search
idx = AsyncSearchIndex.from_dict(
{"index": {"name": "redisvl_repro_missing", "prefix": "redisvl_repro_missing"},
"fields": [{"name": "tag", "type": "tag"}]},
redis_client=client,
)
print(await idx.exists())
asyncio.run(main())
Actual:
redisvl.exceptions.RedisSearchError: Error while fetching redisvl_repro_missing index info: Index with name 'redisvl_repro_missing' not found in database 0
Expected: False, and create() then creates the index.
Impact
langgraph-checkpoint-redis's AsyncShallowRedisSaver.asetup() calls index.create(overwrite=False), so on a new Valkey database the checkpoint and checkpoint_write indexes are never created. Anything that queries those indexes (for example adelete_thread) then fails. Databases created before 0.25.1 are unaffected, because their indexes already exist.
Suggested fix
Either add that wording (for example "not found in database") to _MISSING_INDEX_ERROR_FRAGMENTS, or, independent of wording: when FT.INFO fails with an unrecognised ResponseError, fall back to checking FT._LIST (where the ACL allows it) before raising. That keeps #672's least-privilege benefit and stops create() from failing silently on unfamiliar error text.
Environment
- redisvl 0.28.0 (the fragment list on
mainis unchanged) - redis-py 8.1.0, RESP2
- langgraph-checkpoint-redis 0.5.2
- Amazon ElastiCache for Valkey 9.1.0 (Valkey Search), non-cluster mode
- Python 3.14
- 主要言語
- Python
- スター
- 432
- フォーク
- 111
- 平均マージ
- 5日 17時間
- マージ済み PR(30日)
- 16
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
redis/redis-vl-python のほかの issue
-
Vector field with index_missing=True cannot be created対応中かも @RaphaelFakhri が 6 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
redis/redis-vl-python#770 ·
メンテナーはふだん 5 日以内に返信
-
Add Python 3.15 support対応中かも @vishal-bala が 7 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
redis/redis-vl-python#757 · コメント 1 件 · リアクション 1 件 ·
メンテナーはふだん 5 日以内に返信
-
SearchIndex.drop_keys does not validate cluster hash-tag co-location (inconsistent with drop_documents)対応中かも @Hashim1999164 が 5 日前に担当しました。 オープンbug good first issue index
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
redis/redis-vl-python#601 ·
メンテナーはふだん 5 日以内に返信
-
documentation
難易度 1/5 1時間未満 初心者へのやさしさ 62/100
redis/redis-vl-python#300 ·
メンテナーはふだん 5 日以内に返信
-
Migration executor cannot read an FT.AGGREGATE cursor over a RESP3 connection, raising KeyError対応中かも @Kuang-xianxin が 47 日前に担当しました。 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 68/100
redis/redis-vl-python#714 ·
メンテナーはふだん 5 日以内に返信
redis/redis-vl-python の issue をすべて見る
似ている issue
-
push_gh-pages fails on master branch on forks対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープンgood first issue infrastructure
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
kuznia-rdzeni/coreblocks#1135 ·
-
good first issue server
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
メンテナーはふだん 1 日以内に返信
-
documentation priority: high
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
a-lex-s/mealie-telegram-bot#54 ·
メンテナーはふだん 1 日以内に返信
-
type/test
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
SaltedTan/virgil-language-server#218 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 83/100
btclib-org/btclib-wallet#541 ·
メンテナーはふだん 1 日以内に返信