概述
在學習增删改查之前,先了解下基礎知識。
索引:含有相同屬性的文檔的集合;
類型:索引可以定義一個或多個類型,文檔必須屬于一個類型;
文檔:文檔是可以被索引的節本資料機關。
看了是不是感覺很抽象,可以想象下跟資料庫對應,索引就是一個資料庫,資料庫裡的表就是一個類型,裡面包含的一條一條資料就是文檔。
如:我們要設計一個圖書管理系統,就需要有圖書索引,學生索引,圖書索引内又有不同的類型,教育類,科普類,小說類等圖書
分片:每個索引都有多個分片,每個分片是一個Lucene索引
備份:拷貝一份分片就完成分片的備份
添加索引
RESTful API風格建立 http://<ip>:<port>/<索引>/<類型>/<文檔>
打開postman,有json檢查比較容易讀懂,不易錯誤。

結構化建立索引,
{
"settion":{
"number_of_shards":3,
"number_of_replicas":1
},
"mappings":{
"teacher":{
"properties":{
"name":{
"type":"text"
},
"country":{
"type":"keyword"
},
"gender":{
"type":"text"
},
"age":{
"type":"integer"
},
"date":{
"type":"date",
"format":"yyy-MM-dd HH:mm:ss || yyyy-MM-dd"
}
}
}
}
}
發送PUT請求,添加索引,發現建立成功。
添加
有了索引後,我們進行增加操作。按我們剛才建立的格式添加
注意:我們id我們可以指定,也可以不指定,不指定就會幫我們自動建立一個。
看下添加的資料
修改
修改es文檔方式有兩種,一種是直接修改,一種是腳本修改,我這邊隻介紹第一種。現在把剛才資料的性别改為女
浏覽資料,可以看到資料修改成功
删除
删除文檔
重新整理資料可以看到已經被删除
删除索引
索引已經都被我們删除
查詢
為了友善查詢,我預先插入了十條資料
我們查詢文檔id為1的資料
接下來進行條件查詢
1.查詢所有
指定傳回的資料
模糊比對查詢
聚合查詢
可以看到age字段12歲的有4個人,30歲的有兩個人。
對age字段進行聚合計算
總共有10個數,最小的年齡為12歲,最大70歲,他們的平均值是27.7歲,加起來有277歲。
進階查詢
Query context(文本查詢)
習語比對 它與模糊比對的查詢比較,就比較精确了
{
"query":{
"match_phrase":{
"name":"張三"
}
}
}
多個字段比對查詢
下列語句表示,張三這個字元串在兩個字段,name和gender有的都比對出來
{
"query":{
"multi_match":{
"query":"張三",
"fields":["name","gender"]
}
}
}
文法查詢
下列文法表示查詢字段含有張三或李四的資料
{
"query":{
"query_string":{
"query":"張三 OR 李四"
}
}
}
确定字段文法查詢
{
"query":{
"query_string":{
"query":"張三 OR 李四 OR 男",
"fields":["name","country"]
}
}
}
結構化字段的查詢
下清單示查詢年齡在12歲的資料
{
"query":{
"term":{
"age":12
}
}
}
範圍查詢
下列查詢年齡段12歲到100歲之間的資料
{
"query":{
"range":{
"age":{
"gte":12,
"lte":100
}
}
}
}
Filter Context(條件過濾查詢)
查詢過程中隻判斷文檔是否滿足條件,隻有Yes和No,這是與Query查詢所不同的,不用考慮查詢到的資料比對有多好。
下列查詢字段age為12歲的資料
{
"query":{
"bool":{
"filter":{
"term":{
"age":"12"
}
}
}
}
}
複合查詢
固定分數查詢(不支援match)
{
"query":{
"constant_score":{
"filter":{
"match":{
"name":"周"
}
}
}
}
}
分數為1的資料
{
"query":{
"constant_score":{
"filter":{
"match":{
"name":"周"
}
},
"boost":1
}
}
}
下清單示OR的關系,名字等于張三或性别為nv的資料
{
"query":{
"bool":{
"should":[
{
"match":{
"name":"張三"
}
},
{
"match":{
"gender":"女"
}
}
]
}
}
}
下清單示AND查詢name字段必須為張三,性别也要為女的資料,顯然我們的資料是沒有的
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"張三"
}
},
{
"match":{
"gender":"女"
}
}
]
}
}
}
下列查詢資料name字段必須包含有周,且性别為男,且等于12歲
{
"query":{
"bool":{
"must":[
{
"match":{
"name":"周"
}
},
{
"match":{
"gender":"男"
}
}
],
"filter":{
"term":{
"age":12
}
}
}
}
}
下列查詢除張三以外的資料
{
"query":{
"bool":{
"must_not":{
"term":{
"name":"張三"
}
}
}
}
}