【Elasticsearch】Query DSL
阿新 • • 發佈:2021-02-07
技術標籤:程式園
Elasticsearch提供了基於JSON的完整查詢DSL(特定於域的語言)來定義查詢。將查詢DSL視為查詢的AST(抽象語法樹),它由兩種子句組成:
- Leaf query Cluase 葉子查詢(簡單查詢):這種查詢可以單獨使用,針對指定的欄位查詢指定的值。
- Compound query clauses 複雜查詢:複雜查詢可以包含葉子或者其它的複雜查詢語句,用於組合成複雜的查詢語句,比如not, bool等。
查詢雖然包含這兩種,但是查詢的行為還與查詢的執行環境有關,不同的執行環境,查詢操作也不一樣。
查詢的行為取決於他們所在的查詢上下文,包括Query查詢上下文和Filter查詢上下文。
我們在使用ElasticSearch的時候,避免不了使用DSL語句去查詢,就像使用關係型資料庫的時候要學會SQL語法一樣。如果我們學習好了DSL語法的使用,那麼在日後使用和使用Java Client呼叫時候也會變得非常簡單。
本人在自己的電腦搭建了單機的ES:http://127.0.0.1:9200/,版本是ES6.1.1。
檢視所有索引
GET http://127.0.0.1:9200/_cat/indices?v
建立索引
PUT http://127.0.0.1:9200/commodity?pretty
其中commodity為索引名稱,預設情況下,建立的索引分片數量是 5 個,副本數量是 1 個。
在任意的查詢字串中增加pretty引數,會讓Elasticsearch美化輸出(pretty-print)JSON響應以便更加容易閱讀。
可以在建立索引的時候通過如下引數來指定分片數、副本數量:
{
"settings":{
"number_of_shards":3,
"number_of_replicas":2
}
}
檢視索引的欄位型別(mapping)
GET http://127.0.0.1:9200/commodity?_mapping
建立對映(mapping)
PUT http://127.0.0.1:9200/commodity/userinfo/_mapping
其中userinfo相當於關聯資料庫中的表名, mapping就是欄位型別
請求引數如下:
{
"properties":{
"name":{
"type":"text",
"store":false
},
"city":{
"type":"text",
"store":false
},
"age":{
"type":"long",
"store":false
},
"description":{
"type":"text",
"store":false
}
}
}
刪除索引
DELETE http://127.0.0.1:9200/commodity
新增文件資料
PUT http://127.0.0.1:9200/commodity/userinfo/1
新增id=1的資料:
{
"name":"李四",
"age":22,
"city":"深圳",
"description":"李四來自湖北武漢!"
}
更新文件資料
(1) 覆蓋原來資料
PUT http://127.0.0.1:9200/commodity/userinfo/1
{
"name":"張三丰",
"description":"在武漢讀書,家在武漢!在深圳工作!"
}
(2) 不會覆蓋原來資料,只會更新某個域的資料
POST http://127.0.0.1:9200/commodity/userinfo/1/_update
{
"doc":{
"name":"張三丰",
"description":"在武漢讀書,家在武漢!在深圳工作!"
}
}
刪除文件資料
(1) 根據ID刪除資料
DELETE http://127.0.0.1:9200/commodity/userinfo/1
查詢資料
(1) 根據id查詢資料
GET http://127.0.0.1:9200/commodity/userinfo/1