基于3个hashkey字段在redis缓存中搜索

okxuctiv  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(509)

我需要在redis缓存中基于3个hashkey字段(clientid-string、securityid-string和transactiondate-date)进行搜索。我做了一个基本的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(clientid-string、securityid-string和transactiondate-date)在rediscache中进行搜索。
我有一个非常基本和简单的保存操作:
代码:

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

我只找到了一篇关于java的redisearch的相关文章-jredisearch-redisearch-javaclienthttps://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);                        

    }

我得到一个例外如下:
线程“main”redis.clients.jedis.exceptions.jedisdataexception中出现异常:err unknown命令“ft.create”
排队

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

我在网上没有得到任何决议。

fnx2tebb

fnx2tebb1#

似乎您没有将redisearch模块加载到redis服务器。
请参阅:重新搜索快速入门指南
您可以轻松地运行redis的docker容器,并预装RedSearch:

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

相关问题