背景:初學者面對es的dsl(domain specific language)查詢顯得一臉懵逼,看著各種巢狀的語句不知道有什麼規律,下面就給大家總結一下,方便學習理解記憶。官方的文件版本好像是2.x,es更新很快現在都7.x,現在的很多語法和關鍵字都和2.x的版本不同了,甚至刪除了不少關鍵字,隨著版本越高,相應的查詢語法和關鍵字等方方面面也逐漸穩定起來了。這裡我是按照7.x版本總結的。
根下面的關鍵字
query:葉子查詢
es是的核心是根據字段進行倒排索引,在進行倒排索引的時候和該字段的type有關係,如下::,
"country":}
},"name":}
}}}上面的map欄位定義中country的type是keyword(大小限制是32k),
那麼根據這個字段進行倒排索引的時候,你儲存的值是什麼就是什麼,
比如儲存的資料的country欄位是america,那麼預設建立倒排索引的時候就會是america。
而字段name的type是text, 進行倒排索引的時候,你儲存的值都會被轉換成全小寫進行
儲存,對這個欄位的內容進行分詞, 比如儲存的資料的name欄位是rain,
那麼在該字段的倒排索引的內容就會是rain,預設轉換成小寫。
es的查詢原則:拿我們查詢的字段去倒排索引上查詢匹配
}}
}}
}}
}}
}}
}}
}
}}
:就是乙個詞語變成另外乙個詞語要編輯的次數,也叫萊文斯坦距離(levenshtein distance),指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數,包括
將乙個字元替換成另乙個字元
插入乙個字元
刪除乙個字元
damerau–levenshtein distance是萊溫斯坦距離的拓展版本,將相鄰位置的兩個字元的互換當做一次編輯,而在經典的萊文斯坦距離計算中位置互換是2次編輯。
}}
}
query:復合查詢
為什麼是復合查詢,因為可以巢狀查詢,不像葉子查詢那樣,是最底層的查詢。
復合查詢其他的關鍵字就不多解釋了,著重介紹一下bool查詢,bool查詢下面四個查詢語句
都是內嵌葉子查詢的,且他們有個共同特性,就是查詢條件只有是否。
ES基本查詢語法
1.term主要用於精確匹配哪些值,比如數字,日期,布林值或 not analyzed 的字串 未經分析的文字資料型別 2.terms 跟 term 有點類似,但 terms 允許指定多個匹配條件。如果某個字段指定了多個值,那麼文件需要一起去做匹配 3.range過濾允許我們按照指定範圍查詢一批資料...
es 的常用查詢語法
term主要用於精確匹配哪些值,比如數字,日期,布林值或 not analyzed 的字串 未經分析的文字資料型別 完整的例子,hostname 字段完全匹配成 saaap.wangpos.com 的資料 terms 跟 term 有點類似,但 terms 允許指定多個匹配條件。如果某個字段指定了多...
ES6語法詳解(一)
一 let let和var有什麼區別?let是塊作用域,可以將let後面的變數變成塊作用域 es5語法中只有全域性作用域和函式作用域 二 const 如果const後面的變數是普通變數,改變值的話會報錯。const a 1 a 2 如果後面儲存的是陣列或者物件,改變值不報錯,那麼改變它的指向報錯 c...