elasticsearch 的 warmer 怎么用?

只是用来提速 title body 字段的查询速度
请教该如何实现

阅读 4.6k
1 个回答

Index warmers(索引热身)
wamers可以提早加载fielddata和全局序数,但是他还有一个目的。一个索引的warmer允许你指定一个查询或者汇聚操作在你的新段可被查询之前执行,这个idea就叫做预热、或者叫缓存等,其实缓存是一种重要思想,在计算机技术的方方面面都有使用; 那你的用户就永远不会遇到延迟尖峰时刻了。

期初,这个warmers的最重要的用处是为了确保fielddata的预先加载,这通常是开销最大的部分,这是我们之前讨论的利用这个技术控制的最好的地方,然而,warmers可以用于构建filter 缓存,也可以用于预加载fielddata,这个目的随你选择。

我们可以注册一个warner再去讨论发生了什么:

PUT /music/_warmer/warmer_1 
{
  "query" : {
    "filtered" : {
      "filter" : {
        "bool": {
          "should": [
            { "term": { "tag": "rock"        }},
            { "term": { "tag": "hiphop"      }},
            { "term": { "tag": "electronics" }}
          ]
        }
      }
    }
  },
  "aggs" : {
    "price" : {
      "histogram" : {
        "field" : "price",
        "interval" : 10
      }
    }
  }
}

注:这表示在music索引上注册一个id为warmer_1的warmer,三大流行音乐流派的filter 缓存都会被预先创建,对price字段的fielddata和全局序数都会被预先加载

warmers是注册在一个特定的索引上面的,每一个warmer都有一个唯一的id,因为你可以为一个索引指定多个warmer。

然后你可以之低昂一个查询,或者多个查询,他包含查询语句,filters,aggregations,sort,脚本等有效的查询语句。重点是要注册那些你的用户将要进行,有代表性的查询,从而适当的缓存可以被预先加载。

当一个新的段产生的时候,elasticsearch就会执行你这些warmers里的查询语句。执行这些查询会导致缓存进行加载,只有索引warmers都被执行了,新的段才会变成可搜素状态。

注意:类似于预先加载,warmers 把对冷缓存的开销转移到了刷新时刻。当你注册了warmers,你必须是经过明智判断的。你可以增加成千上万个wamer确保预热所有的缓存,但是这将极大的增加一个新的段从创建变为可搜索的时间。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进