1. 程式人生 > >搜尋引擎_filter與query深入對比解密:相關度,效能

搜尋引擎_filter與query深入對比解密:相關度,效能

filter與query示例

PUT /company/employee/2
{
“address”: {
“country”: “china”,
“province”: “jiangsu”,
“city”: “nanjing”
},
“name”: “tom”,
“age”: 30,
“join_date”: “2016-01-01”
}

PUT /company/employee/3
{
“address”: {
“country”: “china”,
“province”: “shanxi”,
“city”: “xian”
},
“name”: “marry”,
“age”: 35,
“join_date”: “2015-01-01”
}
搜尋請求:年齡必須大於等於30,同時join_date必須是2016-01-01

GET /company/employee/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "join_date": "2016-01-01"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 30
          }
        }
      }
    }
  }
}

filter和query對比
 filter,僅僅只是按照搜尋條件過濾出需要的資料而已,不會計算任何相關度分數,對相關度沒有任何影響
 query,會計算每個document,相對於搜尋條件的相關度,並按照相關度進行排序
一般來說,如果是在進行搜尋,需要將匹配搜尋條件的資料先返回,那麼用query;
如果只是要根據一些條件篩選出一部分資料,不關注其排序,那麼用filter,除非是你的這些搜尋條件,你希望越符合這些搜尋條件的document越排在前面返回,那麼這些搜尋條件要放在query中;如果你不希望一些搜尋條件來影響你的document排序,那麼就放在filter中即可

filter與query效能
 filter,不需要計算相關度分數,不需要按照相關度分數進行排序,同時還有內建的自動cache最常使用filter的資料
 query,相反,要計算相關度分數,按照分數進行排序,而且無法cache結果