Elasticsearch:如何在没有过滤器的情况下缓存布尔查询?

时间:2015-06-20 18:19:04

标签: caching elasticsearch

我有一个像下面的查询来搜索,我想在不使用过滤器的情况下缓存它。 下面的代码运行良好,但我无法使用" _cache":真实。

{"query": {
"bool": {
  "should": [
    {
      "match": {
        "keywords": "heart"
      }
    },
    {
      "match": {
        "treatment_name": "heart"
      }
    },
    {
      "wildcard": {
        "keywords": "heart*"
      }
    },
    {
      "wildcard": {
        "treatment_name": "heart*"
      }
    },
    {
      "fuzzy": {
        "keywords": "heart"
      }
    },
    {
      "fuzzy": {
        "treatment_name": "heart"
      }
    }
  ],
  "minimum_should_match": 2
}}}

第二个代码也可以,但结果没有任何分数,这是非常需要的。

{"filter": {
"fquery": {
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "keywords": "heart"
          }
        },
        {
          "match": {
            "treatment_name": "heart"
          }
        },
        {
          "wildcard": {
            "keywords": "heart*"
          }
        },
        {
          "wildcard": {
            "treatment_name": "heart*"
          }
        },
        {
          "fuzzy": {
            "keywords": "heart"
          }
        },
        {
          "fuzzy": {
            "treatment_name": "heart"
          }
        }
      ],
      "minimum_should_match": 2
    }
  },
  "_cache": true
}}}

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

Elasticsearch不会缓存查询。原因是必须为每个查询单独计算得分。缓存功能仅适用于过滤器。