我们有一个带分页的搜索引擎,我们可以自由搜索文本。
我们正在构建一个这样的查询:
var skip = 0;
var take = 20;
var query = Query<Foo>.Bool(bq => bq.Must(m => m.Term("mandatoryField", mandatoryValue)));
var otherQuery = Query<Foo>.Bool(bq => bq.Must(m => m.QueryString(qs => qs.Query("some text")))));
query &= otherQuery;
var response = Client.Search<Foo>(s => s
.Skip(skip)
.Take(take)
.Sort(// sort on field)
.Query(q => q.MatchAll() && query);
CacheQuery(query) // here the query contains a bool query descriptor;
转到其他页面时需要重复使用此查询。说:
var skip = 20;
var take = 20;
var query = GetCache(); // When retrieving the cache from redis, all the information is lost.
var response = Client.Search<Foo>(s => s
.Skip(skip)
.Take(take)
.Sort(// sort)
.Query(q => q.MatchAll() && query);
但是,在尝试缓存查询时(使用redis),查询中的信息将丢失。
我试过反序列化查询:query.GetCustomJson();但信息仍然丢失。
这里的问题是;我应该以哪种方式缓存查询?
答案 0 :(得分:1)
我建议不要缓存它。你说它是一个带分页的搜索引擎。当您浏览第3页并关闭当天的浏览器并在第二天再次打开时会发生什么?您应该为每个页面提供真实的URL,以便用户可以共享搜索结果等。从URL中获取参数并在每个请求上构建查询而不是缓存。