[ Elasticsearch ] Query DSL 緩慢更新中..
Query and filter context
Elasticsearch 提供一個以JSON定義查詢式Query DSL你可以將Query DSL想成是一個AST (abstract syntax tree) queries
Query DSL 由兩種型態的查詢子句所組成
- Leaf 查詢子句
- Compound 查詢子句
- 包著其他的 leaf 查詢子句 或是 複合查詢
- bool 或 dis_max 或 not 或 constant_score
- Query context
- 傾向於更準確的搜尋
- 此query子句會產生 _score 來顯示match
- Filter context
- 比較像是全文搜索
- 比較像是回答 "這個文件是否符合此query子句"
- 常被用來過濾結構化的資料
- 例如: 這個文件的狀態是否被設定成已發布
- 常用filter搜尋的資料會自動被cache起來用以加速
- Reference: 對岸好文
下列的例子在search api中使用了query與filter context
此query將會符合以下的條件- title 欄位包含search這個字串
- content 欄位包含elasticsearch這個字串
- status欄位等於published這個值
- publish_date欄位包含日期大於等於 1 Jan 2015
GET _search
{
"must": [
],
]
}
}
}
Math All Query
query 參數代表query context
| |
bool 和 兩個被用在query context match 子句
代表被用來評分每個document的match程度
| |
filter 參數代表 filter context
| |
term 和 range 子句 被用在 filter context. 他們將會篩選出沒有符合但不影響符合資料評分的資料 也就是說 filter篩選出的資料中比較不精準,但還是會符合條件 |
Math All Query
- 找出所有的documents, 所有的documents的_score都會是1.0
- 例如: { "match_all": { } }
- _score可以藉由boost改變值
- { "match_all": { "boost": 1.2 } }
- 高階全文搜索經常被用在全文欄位, ex: email的body
- match
- 標準的全文搜索的查詢, 包含模糊搜尋, 片語或是類似的搜尋 (proximity queries)
- multi_match
- common_terms
- query_string
- simple_query_string
留言
張貼留言