NEST ElasticSearch缓存QueryDescriptor供将来使用

本文关键字:将来 QueryDescriptor ElasticSearch 缓存 NEST | 更新日期: 2024-09-22 02:26:11

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

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

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

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

NEST ElasticSearch缓存QueryDescriptor供将来使用

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