ElasticSearch實戰之Filter Query過濾查詢(六)

Filter Query(過濾查詢)

1.1 過濾查詢

其實準確來說,ES中的查詢操作分爲2種: 查詢(query)過濾(filter)查詢即是之前提到的query查詢,它 (查詢)默認會計算每個返回文檔的得分,然後根據得分排序而過濾(filter)只會篩選出符合的文檔,並不計算 得分,且它可以緩存文檔 。所以,單從性能考慮,過濾比查詢更快

換句話說,過濾適合在大範圍篩選數據,而查詢則適合精確匹配數據。一般應用時, 應先使用過濾操作過濾數據, 然後使用查詢匹配數據

1.2 過濾語法

GET /ems/emp/_search
{
  "query": {
    "bool": {
      "must": [
        {"match_all": {}}
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 10
          }
        }
      }
    }
  }
}

NOTE: 在執行filter和query時,先執行filter在執行query

NOTE:Elasticsearch會自動緩存經常使用的過濾器,以加快性能。

1.3 常見的過濾器類型

term 、 terms Filter

GET /ems/emp/_search   # 使用term過濾
{
  "query": {
    "bool": {
      "must": [
        {"term": {
          "name": {
            "value": "小黑"
          }
        }}
      ],
      "filter": {
        "term": {
          "content":"框架"
        }
      }
    }
  }
}

GET /dangdang/book/_search  #使用terms過濾
{
  "query": {
    "bool": {
      "must": [
        {"term": {
          "name": {
            "value": "中國"
          }
        }}
      ],
      "filter": {
        "terms": {
          "content":[
              "科技",
              "聲音"
            ]
        }
      }
    }
  }
}

ranage filter 範圍過濾器

GET /ems/emp/_search
{
  "query": {
    "bool": {
      "must": [
        {"term": {
          "name": {
            "value": "中國"
          }
        }}
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 7,
            "lte": 20
          }
        }
      }
    }
  }
}

exists filter 過濾存在指定字段,獲取字段不爲空的索引記錄使用

GET /ems/emp/_search
{
  "query": {
    "bool": {
      "must": [
        {"term": {
          "name": {
            "value": "中國"
          }
        }}
      ],
      "filter": {
        "exists": {
          "field":"aaa"
        }
      }
    }
  }
}

ids filter 過濾含有指定字段的索引記錄

GET /ems/emp/_search
{
  "query": {
    "bool": {
      "must": [
        {"term": {
          "name": {
            "value": "中國"
          }
        }}
      ],
      "filter": {
        "ids": {
          "values": ["1","2","3"]
        }
      }
    }
  }
}

NOTE: 更多內容請參考Elastic Search官方文檔: https://www.elastic.co/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章