基于3个hashKey字段在Redis缓存中搜索

时间:2020-03-30 17:53:23

标签: caching redis redisearch

我有一个要求,我需要基于3个hashKey字段在Redis缓存中进行搜索-(clientId-字符串,securityId-字符串和transactionDate-日期)。我做了一个基本的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);
}

现在如何基于上述三个hashKey在RedisCache中进行搜索-( clientId -字符串, securityId -字符串和 transactionDate -日期)。

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

代码:

@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:错误未知命令'FT.CREATE'

在行

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

我在网上没有任何解决方法。

1 个答案:

答案 0 :(得分:0)

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

请参阅:Quick Start Guide for RediSearch

您可以轻松地运行带有RediSearch的Redis Docker容器:

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