全部產品
Search
文件中心

OpenSearch:cache子句

更新時間:Jul 13, 2024

子句說明

Searcher Cache對searcher上request的最終查詢結果(精排或者打散後的結果)進行緩衝,減少重複的query的粗排和精排計算量,提高單個searcher的處理能力。對於某個request的結果是否應該進cache,以及該request對應的cache結果如何失效等策略都是和具體商務邏輯緊密相關的,Searcher Cache允許使用者在配置和查詢串中對不同的策略進行開關設定,結合ha3的外掛程式機制可以靈活的定製各種使用者對cache的業務需求。

子句文法

{
  "cache" : {
  }
}

參數說明:

  • enabled:指定是否進Searcher Cache的開關,其值可以為:true 或者 false

  • cache_key:指定當前request的key,這個key由使用者產生並在request指定。key的選擇和建置原則會影響Searcher Cache的命中率,每個應用應該根據具體的使用情境和業務特點來選擇產生合適的key,來保證Searcher Cache的命中率。如果麼有填預設對整個request進行hash作為cache的key。

  • expire_time:request在Searcher Cache中的對應的item都是有一個到期時間,確保結果的時效性。到期時間的設定是和具體應用密切相關的,如果應用不關心結果的時效性或者沒有累加式更新的情況下甚至可以忽略expire_time的指定,預設是該request對應的item永不到期,直到cache的lru策略將其移除。expire_time是一個ha3支援的任意運算式(attribute expression, function expression, virtual attribute expression以及有前三者組成的算數運算式),傳回值必須類型為uint32,否則報錯,expirte_time所指定的到期時間的單位是s。Searcher Cache內部,在將request的查詢結果放進cache之前,會使用expire_time運算式為結果中的每個doc計算一個到期時間,然後取最小的到期時間作為該request對應的整個cache結果的到期時間。

  • current_time:如果request指定了cur_time,則Searcher Cache通過比較item的到期時間和cur_time來判斷當前request對應的item是否逾時時;如果沒有指定cur_time則到期時間與系統的目前時間進行比較。

  • cache_filter:使用者可以通過指定cache_filter來對cache中的結果進行過濾,過濾文法和普通的filter相同。

  • cache_doc_num_limit:指定request的查詢結果進cache的doc數,為了得到更好的cache 命中率,需要在每個查詢中指定。預設值為 [200, 3000], 可以配置成多級的[100, 200, 300]。例如當配置為"cache_doc_num_limit": [280, 780]時,這時cache 文檔的策略為:searcher 中的required_topK <= 280時,cache緩衝280個doc;當280 < requried_topK <= 780時,緩衝780個doc;required_topK > 780時,保留required topK個文檔。

  • refresh_attributes: 指定cache命中時重新整理的attribute,目前只支援schema中attribute,不支援virtual_attribute。cache結果存在時間較長時,某些attribute的值可能已經被即時更新了,因此cache中的結果無法保證時效性,開啟此項功能可使得這些attribute總是使用最新值,從而保證時效性。

樣本:

{
  "cache" : {
    "enabled" : true,
    "cache_key" : 1234567890,
    "expire_time" : "now()+300",
    "current_time" : 1235,
    "cache_filter" : "a > 10",
    "cache_doc_num_limit" : [200, 3000],
    "refresh_attributes": ["price", "sell_count"]
  }
}

注意事項

  • searcher_cache是可選子句。

  • 當前採用的Cache 文檔個數策略與searcher上required topK相關。這個required topK與request中的start + hit值相關。當存在多個searcher時,QRS會對每個searcher返回的文檔個數做限制,主要通過searcher_return_hits來限制。所以searcher上的required top值為:min(start+hit, searcher_return_hits)。

  • Searcher Cache緩衝的是精排後的結果,為了保證有足夠的結果進cache,必須使得有相應數目的結果能在精排後被留下來,可以在rerank scorer中指定rank_size或者request中的config子句指定rerank_size。