NEST ElasticSearch Cache QueryDescriptor供将来使用

时间:2015-03-02 12:49:48

标签: c# caching elasticsearch nest

我们有一个带分页的搜索引擎,我们可以自由搜索文本。

我们正在构建一个这样的查询:

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();但信息仍然丢失。

这里的问题是;我应该以哪种方式缓存查询?

1 个答案:

答案 0 :(得分:1)

我建议不要缓存它。你说它是一个带分页的搜索引擎。当您浏览第3页并关闭当天的浏览器并在第二天再次打开时会发生什么?您应该为每个页面提供真实的URL,以便用户可以共享搜索结果等。从URL中获取参数并在每个请求上构建查询而不是缓存。