查詢後過濾(Filter)是Table Store多元索引(Search Index)新增的一種查詢協助工具功能,支援對 Query 結果再做一次過濾。該功能的目的主要是人工幹預內部的查詢最佳化工具,強制某些查詢條件在最後階段執行,使用合理,可以大幅提高查詢效能。
如需使用查詢後過濾功能,請聯絡Table Store支援人員開通。
功能介紹
查詢後過濾(Filter)是一種不同於 Query 的查詢文法,執行步驟在 Query 階段執行後, 在 Aggregate 和 GroupBy 階段執行之前。
主要作用是通過人為控制查詢流程,最佳化查詢最佳化工具,將命中量大的查詢條件從 Query 階段移到 Filter 階段可以大幅提升查詢效能。
Query 階段:支援多元索引的所有查詢類型(例如範圍查詢、精確查詢、模糊查詢、地理位置查詢等)和所有資料類型,用於從索引中初步檢索合格資料。
Filter 階段:在Query 階段的結果上進行二次篩選,僅支援Keyword、Long 和 Double 類型,查詢文法支援精確查詢、範圍查詢、存在性查詢等類型
與其他過濾方式的對比
與 Elasticsearch post_filter 的區別
兩者的區別主要是生效位置不同:
Tablestore 中 Filter 的執行順序:Query → Filter → Aggregate/TotalCount
Elasticsearch 中 post_filter 的執行順序:Query → Aggregate/TotalCount → PostFilter
與 Tablestore BoolQuery 中 Filter 的區別
BoolQuery 中 Filter 類似於 BoolQuery 中 Must,屬於 Query 中的一個子功能。
使用限制
必須與多元索引查詢條件組合使用,支援精確查詢(TermQuery)、多詞精確查詢(TermsQuery)、範圍查詢(RangeQuery)、列存在性查詢(ExistsQuery)及其組合查詢(BoolQuery)。
BoolQuery 查詢時,僅支援必須匹配(mustQueries)、必須不匹配(mustNotQueries)、可選匹配(shouldQueries)子句,不支援過濾子句(filterQueries)。
僅支援對不可分詞字串(Keyword)、長整型(Long)、雙精確度浮點型(Double)欄位進行過濾,且欄位必須啟用排序統計(enableSortAndAgg)屬性。
查詢後過濾不支援設定權重。