【问题标题】:Searching in Redis Cache on basis of 3 hashKey Fields根据 3 个 hashKey 字段在 Redis Cache 中搜索
【发布时间】:2020-07-11 04:11:30
【问题描述】:

我有一个要求,我需要根据 3 个 hashKey 字段(clientId - String、securityId - String 和 transactionDate - Date)在 Redis 缓存中进行搜索。我做了一个基本的 POC,我在其中实现了一个足够简单的方法来按 Id 查找。

代码:

private RedisTemplate<String, EquityFeeds> redisTemplate;

private HashOperations hashOperations;

public EquityFeedsRedisRepositoryImpl(RedisTemplate<String, EquityFeeds> redisTemplate) {
   this.redisTemplate = redisTemplate;
   this.hashOperations = redisTemplate.opsForHash();
}

public EquityFeeds findById(String id) {
    return (EquityFeeds) hashOperations.get("KEY", id);
}

现在我如何根据上述 3 个 hashKeys 在 RedisCache 中搜索 - (clientId - String, securityId - String 和 transactionDate - Date )。

我有一个非常基本和简单的保存操作:

代码:

@Override
public void save(EquityFeeds equityFeeds) {
   hashOperations.put("EQUITY", equityFeeds.getId(), equityFeeds);
}

我只在 RediSearch for Java - JRediSearch - RediSearch Java Client https://oss.redislabs.com/redisearch/java_client.html

上找到了一篇相关文章

当我使用此站点运行程序示例时: 代码:

public static void main(String[] args) {

        Client client = new Client("EQUITY", "localhost",6379);

        Schema sc = new Schema()
                        .addTagField("clientId")
                        .addTagField("securityId")
                        .addTagField("transactionDate");

        client.createIndex(sc, Client.IndexOptions.defaultOptions());

        Map<String, Object> fields = new HashMap<String, Object>();
        fields.put("clientId", "hello world");
        fields.put("securityId", "lorem ipsum");
        fields.put("transactionDate", "1337");

        client.addDocument("doc1", fields);

        Query q = new Query("hello world");

        SearchResult res = client.search(q);

        System.out.println("Result: "+res.totalResults);                        

    }

我收到如下异常:

线程“主”redis.clients.jedis.exceptions.JedisDataException 中的异常:ERR 未知命令“FT.CREATE”

在行中

client.createIndex(sc, Client.IndexOptions.defaultOptions());

我在网上没有得到任何解决方案。

【问题讨论】:

  • 你考虑过使用Redis模块RediSearch吗?
  • @Guy:不。老实说,我还没有听说过 RediSearch。能否请您指导我如何使用它。一些示例代码或网站链接可能对我有帮助吗?我只做了一个非常简单的 POC,涉及基本的 CRUD 操作,如我上面的代码所示。
  • @Guy:我在上面编辑了我的帖子。我使用了 JRediSearch - RediSearch Java Client 使用链接oss.redislabs.com/redisearch/java_client.html。但是我在上面的帖子中提到了一个异常,并且无法在谷歌中获得任何异常的解决方案。我让 RedisServer 作为服务在我的机器上运行。我有windows机器。

标签: caching redis redisearch


【解决方案1】:

您似乎没有将 RediSearch 模块加载到您的 Redis 服务器。

见:Quick Start Guide for RediSearch

您可以轻松地运行一个预先加载了 RediSearch 的 Redis docker 容器:

docker run -p 6379:6379 redislabs/redisearch:latest

【讨论】:

    猜你喜欢
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    相关资源
    最近更新 更多