使用 C# 对 StackExchange.Redis 哈希中的字段进行通配符搜索

wildcard search on field in StackExchange.Redis hash using C#

我浏览了很多关于 SO 的帖子。 Get-All-Hashesh

我遇到了一些不同的情况。我的项目有 redis 哈希。结构如下:

Redis: 
Key - H_SD_C_India 
Field - Ameya_Deshpande_India
Value - JSON

我需要的是搜索所有在字段中包含特定值的文档。像这样

Where Field.Contains("Ameya*)

我们在 .Net 中使用 StackExchange.Redis 及其方法来存储和从 Redis 缓存中获取数据。

成员建议的选项很少,例如 HMSETHSCANSCAN 0 TYPE hash,但这些都在 CLI 中。

我尝试了以下方法来查找数据:但没有得到我预期的结果。

HashGetAsync("H_SD_C_India", "Ameya*");

Please suggest how to do wildcard search from .Net application using StackExchange.Redis

已解决。我在 stockExchange.Redis 中没有找到任何直接方法,我们所做的是在 ExecuteAsync 方法 SDK 中从 CLI 执行命令。

代码如下所示:

public async Task<List<T>> HashFieldSearch<T>(string hashKey, string HashFieldfilterValue, bool isWildCardSearch)
        {
            var redisData = new List<T>();
            #region With HSCAN and MATCH
            int nextCursor = 0;
            do
            {
                RedisResult matchRedisResultFromCache = await dbCache.ExecuteAsync("HSCAN", new object[] { hashKey, nextCursor.ToString(), "MATCH", isWildCardSearch ? $"{HashFieldfilterValue}*" : HashFieldfilterValue, "COUNT", "1000" });
                var matchRecord = (RedisResult[])matchRedisResultFromCache;
                nextCursor = int.Parse((string)matchRecord[0]);
                List<string> cacheResultCount = ((string[])matchRecord[1]).ToList();
                // If data is present for that cursor then only deserialize it to type otherwise return resultset
                if (cacheResultCount.Count > 0)
                {
                    redisData.Add(JsonConvert.DeserializeObject<T>(CacheGZipHelper.Unzip(((byte[])((RedisValue[])matchRecord[1])[1]))));
                }
            }
            while (nextCursor != 0);
            #endregion With HSCAN and MATCH
            return redisData;
        }

Hope it will help to someone in future.