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

How to serialize elastic4s queries for reuse?

我正在使用 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" : {
            ...

注意双 "query" 标签。

由于文档中不是很清楚,有人想解决这个问题吗?

谢谢!

终于发现问题了。查询 return 由

编辑
searchDefinition._builder.toString

return 以及密钥:

"query" : {
    ...
}

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

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

工作得很好!