可以含有查询也可以含有别的filter
    {
        "query":{
            "filtered": {
                "query": {
                    "match": { "tweet": "full text search" }
                },
                "filter": {
                    "range": { "created": { "gte": "now-1d/d" }}
                }
            }
        }
    }
  • multiple filters(多个过滤器可以被包装在一个bool里)
      {
          "query":{
              "filtered": {
                  "query": { "match": { "tweet": "full text search" }},
                  "filter": {
                      "bool": {
                          "must": { "range": { "created": { "gte": "now-1d/d" }}},
                          "should": [
                              { "term": { "featured": true }},
                              { "term": { "starred":  true }}
                          ],
                          "must_not": { "term": { "deleted": false }}
                      }
                  }
              }
          }
      }
    
  • Filter strategyedit

You can control how the filter and query are executed with the strategy parameter:

{
    "filtered" : {
        "query" :   { ... },
        "filter" :  { ... },
        "strategy": "leap_frog"
    }
}
<font color=RED>This is an expert-level setting. Most users can simply ignore it.</font>

The strategy parameter accepts the following options:

leap_frog_query_firstLook for the first document matching the query, and then alternatively advance the query and the filter to find common matches.
leap_frog_filter_firstLook for the first document matching the filter, and then alternatively advance the query and the filter to find common matches.
leap_frogSame as leap_frog_query_first.
query_firstIf the filter supports random access, then search for documents using the query, and then consult the filter to check whether there is a match. Otherwise fall back to leap_frog_query_first.
random_access_${threshold}If the filter supports random access and if there is at least one matching document among the first threshold ones, then apply the filter first. Otherwise fall back to leap_frog_query_first. ${threshold} must be greater than or equal to 1.
random_access_alwaysApply the filter first if it supports random access. Otherwise fall back to leap_frog_query_first.

The default strategy is to use query_first on filters that are not advanceable such as geo filters and script filters, and random_access_100 on other filters.

⤧  Next post elasticsearch common terms query(常用术语查询) ⤧  Previous post elasticsearch bool query(布尔类型query)