在弹性支持的内存中缓存_source

时间:2016-01-05 09:41:37

标签: caching search elasticsearch

我在排序脚本中使用_source字段,根据涉及多级嵌套字段的复杂逻辑对文档进行排序。但是accessing _source from disk for each matched document is performing poorly, giving me ~ 3 sec response times.

有没有办法通过在内存中缓存_source字段来改善这一点?我愿意为更多的内存付费,以便改善延迟。如果没有,是否可以扩展elasticsearch以自己构建/使用此缓存?

编辑: 这是我的用例:我的酒店文档有多个房间,每个房间都有明智的价格和库存。

hotel > rooms > dailyPriceInventories

我在所有三个级别都有过滤器。说酒店有5星评级,房间有"免费无线网络"舒适度和日期d1-d2以及价格p1-p2之间的库存为2。

现在要进行排序,我想从所有匹配的嵌套文档中计算最低价格。但是对于常规排序这是不可能的,因为我无法在其中的多个嵌套级别上指定过滤器。所以我必须利用脚本排序。但是在访问嵌套级别字段的脚本中只能使用_source字段。

映射:

"hotel": {
        "properties": {
           "name": {
              "type": "string",
           },
           "id": {
              "type": "string",
           },
           "roomTypes": {
              "type": "nested",
              "properties": {
                 "roomCode": {
                    "type": "string",
                    "index": "not_analyzed",
                 },
                 "roomType": {
                    "type": "string",
                    "index": "not_analyzed",
                 },
                 "amenities": {
                      "type": "string",
                      "index": "not_analyzed",
                 },
                 "invPrice": {
                      "type": "nested",
                      "properties": {
                         "date": {
                            "type": "date",
                            "format": "dateOptionalTime",
                         },
                         "inventory": {
                            "type": "integer",
                         },
                         "price": {
                            "type": "double",
                         }
                      }
                   }
              }
           },
           "starRating": {
              "type": "short",
           }
        }
    }

0 个答案:

没有答案