我需要在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());
我在网上没有得到任何决议。
1条答案
按热度按时间fnx2tebb1#
似乎您没有将redisearch模块加载到redis服务器。
请参阅:重新搜索快速入门指南
您可以轻松地运行redis的docker容器,并预装RedSearch: