如何序列化elastic4s查询以便重用?

时间:2015-08-11 13:29:20

标签: scala elasticsearch elastic4s

我正在使用elastic4s来查询弹性搜索,现在我需要缓存此查询以便稍后用于分页目的。

查询构建过程是一个繁重的计算,这就是为什么我需要在一些本地缓存(即redis)中自我保存的最终查询,以便在以后检索和使用。

我面临的问题是,如何序列化或转换为以后我反序列化和重用的方式对此查询进行字符串化。

目前这是我正在使用的方法:

存储

var searchDefinition = search.in(s"$indexName/$docType").query2(buildQuery)
Cache.save(key, searchDefinition._builder.toString)

恢复

val cachedQuery = Cache.restore(key)
val searchDefinition = search.in(s"$indexName/$docType")
searchDefinition._builder.setQuery(cachedQuery)

问题是:

从缓存中恢复后重建的查询已中断。看起来如何:

Query: {
    "from" : 0,
    "size" : 20,
    "query":{
        "query" : {
            "function_score" : {
            ...

请注意双“查询”标记。

因为在文档中不是那么清楚,有没有人想过要解决它?

谢谢!

1 个答案:

答案 0 :(得分:0)

最后发现问题。

返回的查询
searchDefinition._builder.toString

还要关键:

"query" : {
    ...
}

我可以设法解决问题,通过手动删除额外的查询字符串来清理查询字符串,然后调用:

val cachedQuery = Cache.restore(key)
search.in(s"$indexName/$docType").rawQuery(cachedQuery)

像魅力一样工作!