過濾查詢(Filter)和評分查詢(Query)性能差異
過濾查詢(Filtering queries)只是簡單的檢查包含或者排除涌韩,這就使得計算起來非常快』器ⅲ考慮到至少有一個過濾查詢(filtering query)的結(jié)果是 “稀少的”(很少匹配的文檔),并且經(jīng)常使用不評分查詢(non-scoring queries)平匈,結(jié)果會被緩存到內(nèi)存中以便快速讀取框沟,所以有各種各樣的手段來優(yōu)化查詢結(jié)果。
相反增炭,評分查詢(scoring queries)不僅僅要找出匹配的文檔忍燥,還要計算每個匹配文檔的相關(guān)性,計算相關(guān)性使得它們比不評分查詢費力的多隙姿。同時梅垄,查詢結(jié)果并不緩存。
多虧倒排索引(inverted index)输玷,一個簡單的評分查詢在匹配少量文檔時可能與一個涵蓋百萬文檔的filter表現(xiàn)的一樣好队丝,甚至?xí)谩5窃谝话闱闆r下饲嗽,一個filter 會比一個評分的query性能更優(yōu)異炭玫,并且每次都表現(xiàn)的很穩(wěn)定。
過濾(filtering)的目標(biāo)是減少那些需要通過評分查詢(scoring queries)進(jìn)行檢查的文檔貌虾。
對于精確值的查詢吞加,你可能需要使用 filter 語句來取代 query,因為 filter 將會被緩存。
相關(guān)性評分計算
用 term 查詢計算每個文檔相關(guān)度評分 _score 衔憨,這是種將詞頻(term frequency叶圃,即詞 quick 在相關(guān)文檔的 title 字段中出現(xiàn)的頻率)和反向文檔頻率(inverse document frequency,即詞 quick 在所有文檔的 title 字段中出現(xiàn)的頻率)践图,以及字段的長度(即字段越短相關(guān)度越高)相結(jié)合的計算方式掺冠。
exact value 與full text
ElasticSearch把值分成兩類:exact value 與full text。
當(dāng)針對exact value的字段搜索時码党,使用布爾判斷德崭,例如:Foo != foo。
當(dāng)針對full text的字段搜索時揖盘,則是計算相關(guān)程度眉厨,例如:UK與United Kingdom相關(guān)、jumping與leap也相關(guān)兽狭。