2015-06-20 1 views
0

У меня есть запрос, как показано ниже, и я хочу кэшировать его без использования фильтра. Код ниже работает хорошо, но я не мог использовать «_cache»: true с ним.Elasticsearch: как кэшировать логический запрос без фильтра?

{"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

Elasticsearch не кэшировать запросы. Причина в том, что оценка должна рассчитываться отдельно для каждого запроса. Функциональность кэширования предоставляется только для фильтров.

Смежные вопросы