01.query的分类-条件查询和组合查询
文章目錄
- 1. es單個條件查詢和組合查詢
- 2.query和filter context
- 1. query context
- 2. filter context
- 3.使用樣例
1. es單個條件查詢和組合查詢
es的query DSL(Domain Specific Language),都是json格式,一般分為兩大類
1.單個條件查詢
這種一般是針對index中的某一個field進行個別value的查詢,比如 mathc,term,range 查詢等等。這些查詢一般可以獨立使用。
2.組合查詢
這種查詢一般是將單個條件的查詢組合起來,只是起到組合的作用,比如bool, dis_max 查詢,或者是修改查詢的一些查詢比如constant_score查詢
2.query和filter context
默認情況下,Elasticsearch按相關性得分對匹配的搜索結果進行排序,以衡量每個文檔與查詢的匹配程度。
相關性分數是一個正浮點數,在搜索API的_score元字段中返回。 _score越高,文檔越相關。盡管每種查詢類型可以用不同的方式地計算相關性分數,但是分數計算還取決于查詢子句是在query context中還是在filter context中運行。
1. query context
在query context中,查詢子句回答以下問題:“此文檔與該查詢子句的匹配程度如何?”除了確定文檔是否匹配之外,查詢子句還計算_score元字段中的相關性得分。
只要將查詢子句傳遞到query參數(例如搜索API中的query參數),query context就有效。
2. filter context
在filter context中,查詢子句回答問題“此文檔是否與此查詢子句匹配?”答案是簡單的“是”或“否”,即不計算分數。filter context主要用于過濾結構化數據,例如下面的過濾:
常用過濾器將由Elasticsearch自動緩存,以提高性能。
只要將查詢子句傳遞到過濾器參數(例如bool查詢中的filter或must_not參數,constant_score查詢中的filter參數或過濾器聚合),filter context即有效。這一句也說明了filter context的使用場景。
3.使用樣例
GET /_search {"query": { # 對應的query標識了一個query context"bool": { # bool和對應的math都是對應了query context"must": [{ "match": { "title": "Search" }}, { "match": { "content": "Elasticsearch" }} ],"filter": [ # 這里filter標識了一個filter context,下面的term,range都是在filter context中,不會影響score的計算 { "term": { "status": "published" }}, { "range": { "publish_date": { "gte": "2015-01-01" }}} ]}} }這個查詢要求下面的條件都要滿足
總結
以上是生活随笔為你收集整理的01.query的分类-条件查询和组合查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 18.fields_capabiliti
- 下一篇: 03.full_text interva