1、什麼是query dsl
get /_search
}}
query 中有哪些query_name
全部查詢出來 match all
get /web/info/_search --查詢所有的文件
}}
匹配查詢match
get /web/info/_search --查詢出content中包含 second的文件
}}
查詢出多個filed中包含某某的文件multi_match
get /web/info/_search--查詢出content和author_id中包含 xlucas的文件
}}
範圍查詢 range
get /web/info/_search --查詢post_date大於等於2018-11-02的文件
}}}
精準查詢term
get /web/info/_search--查詢post_date全匹配上2018-11-02的文件
} }
}
精準查詢term3
get /web/info/_search --查詢post_date匹配上2018-11-02或者2018-11-03的文件
}}
組合查詢 bool
bool裡面可以帶上這些must,must_not,should,filter
每個子查詢都會計算乙個document針對它的相關度分數,然後bool綜合所有分數,合併為乙個分數,filter是不會計算分數的
案例:查詢author_id必須包含xlucas的,content中不包含third的,title中可以有info的,並且post_date要大於2018-11-02且小於2018-11-03的文件
get /web/info/_search
} ],
"must_not": [}],
"should": [}],
"filter":
}},}}]}
}}
}}
單純查詢過濾出來的資料
get /web/info/_search }}
}}}
es中的查詢**檢查器
get /web/info/_validate/query?explain --故意將author_id寫錯成author_i
}}
報錯資訊
,
"valid": true,
"explanations": [
]}
es中排序
預設情況下,是按照_score降序排序的,如果_score是一樣的,那麼想自定義排序方法。
如下:按照post_date的降序排序
get /web/info/_search
},"sort": [
}]}
filter與query對比
filter,僅僅只是按照搜尋條件過濾出需要的資料而已,不計算任何相關度分數,對相關度沒有任何影響
query,會去計算每個document相對於搜尋條件的相關度,並按照相關度進行排序
一般來說,如果你是在進行搜尋,需要將最匹配搜尋條件的資料先返回,那麼用query;如果你只是要根據一些條件篩選出一部分資料,不關注其排序,那麼用filter除非是你的這些搜尋條件,你希望越符合這些搜尋條件的document越排在前面返回,那麼這些搜尋條件要放在query中;如果你不希望一些搜尋條件來影響你的document排序,那麼就放在filter中即可
filter與query效能
filter,不需要計算相關度分數,不需要按照相關度分數進行排序,同時還有內建的自動cache最常使用filter的資料
query,相反,要計算相關度分數,按照分數進行排序,而且無法cache結果
es的查詢邏輯
1.es的query分為三個階段 分散查詢 聚和查詢 最終結果返回 a 分散查詢階段 假設收到請求的節點為a節點,a節點會把查詢請求分發到構成要查詢的索引的每個分片所在的節點上 假設是b,c,d三個節點 b,c,d三個節點會把滿足查詢條件的document的id和對應的score返回給a節點 b 聚...
es 父子查詢 es父子文件建立查詢
一 準備 1,elasticsearch 5.6.9 2,kibana 5.6.9 3,jdk1.8 二 建立索引,文件 1建立資料庫put database?pretty station stationname 三 填充資料 插入父文件一條記錄 插入id 1的6路post database lin...
ES查詢語句
1.萬用字元查詢keyword欄位 不會建分詞索引,會建索引 2.刪除並釋放磁碟空間 post monitor delete by query 1.查詢你要刪除的doc資料 以2019 5 18 00 00 00時間節點和time欄位為例 具體 如下 monitor search post 2.手動...