2015-03-02 24 views
0

我們有一個帶分頁的搜索引擎,我們可以自由搜索文本。NEST ElasticSearch緩存QueryDescriptor以供將來使用

我們正在建立一個這樣的查詢:

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

我建議不要緩存它。你說這是一個帶分頁的搜索引擎。當您瀏覽第3頁並關閉瀏覽器並在第二天再次打開時會發生什麼?您應該爲每個頁面提供真實的URL,以便用戶可以共享搜索結果等。從URL中提取參數並在每個請求上構建查詢,而不是緩存。