Elasticsearch 過濾器

本文主要記錄es的查詢過濾的使用。html

使用過濾器

過濾器不影響評分,而評分計算讓搜索變得複雜,並且須要CPU資源,於是儘可能使用過濾器,並且過濾器容易被緩存,進一步提高查詢的總體性能。緩存

post_filter(先查詢再過濾)

{ 
    "query": {
        "match":{"title":"Catch-22"}
    },
    "post_filter":{
        "term":{"year":1961}
    }
}

filtered(先過濾再查詢,速度快)

{
    "query": {
        "filtered": {
            "query": {
                "match": {
                    "title": "Catch-22"
                }
            }, 
            "filter": {
                "term": {
                    "year": 1961
                }
            }
        }
    }
}

這種方式在2.2版本被廢棄調用,改用bool的方式elasticsearch

{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "title": "Catch-22"
                }
            }, 
            "filter": {
                "term": {
                    "year": 1961
                }
            }
        }
    }
}

過濾器種類

範圍過濾器

{
   "post_filter":{
         "range":{
             "year":{
                 "gte":1930,
                 "lte":1990
             }
         }         
    }
}

exists過濾器

{
   "post_filter":{
         "exists":{
             "field":"year"
         }
    }
}

missing過濾器

過濾掉給定字段有值或缺失的文檔ide

{
   "post_filter":{
         "missing":{
             "field":"year",
             "null_value":0,
             "existence":true
         }
    }
}

腳本過濾器

過濾掉髮表在一個世紀之前的書post

{
   "post_filter":{
         "script":{
             "script":"now - doc[‘year‘].value > 100",
             "params":{"now":2012}
         }
    }
}

類型過濾器

當查詢運行在多個索引上時,有用性能

{
   "post_filter":{
         "type":{
             "value":"book"
         }
    }
}

限定過濾器

限定每一個分片返回的文檔數ui

{
   "post_filter":{
         "limit":{
             "value":1
         }
    }
}

標識符過濾器

好比要指定標識符爲1,2,3的文檔spa

{
   "post_filter":{
         "ids":{
             "type":["book"],
             "values":[1,2,3]
         }
    }
}

組合過濾器

{
    "query": {
        "bool": {
            "must": {
                "range": {
                    "year": {
                        "gte": 1930, 
                        "lte": 1990
                    }
                }
            }, 
            "should": {
                "term": {
                    "available": true
                }
            }, 
            "boost": 1
        }
    }
}
相關文章
相關標籤/搜索