天天看點

Elasticsearch基本操作,增,删,改,查

概述

在學習增删改查之前,先了解下基礎知識。

索引:含有相同屬性的文檔的集合;

類型:索引可以定義一個或多個類型,文檔必須屬于一個類型;

文檔:文檔是可以被索引的節本資料機關。

看了是不是感覺很抽象,可以想象下跟資料庫對應,索引就是一個資料庫,資料庫裡的表就是一個類型,裡面包含的一條一條資料就是文檔。

如:我們要設計一個圖書管理系統,就需要有圖書索引,學生索引,圖書索引内又有不同的類型,教育類,科普類,小說類等圖書

分片:每個索引都有多個分片,每個分片是一個Lucene索引

備份:拷貝一份分片就完成分片的備份

添加索引

RESTful API風格建立 http://<ip>:<port>/<索引>/<類型>/<文檔>

打開postman,有json檢查比較容易讀懂,不易錯誤。

Elasticsearch基本操作,增,删,改,查

 結構化建立索引,

{
    "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請求,添加索引,發現建立成功。

Elasticsearch基本操作,增,删,改,查

 添加

有了索引後,我們進行增加操作。按我們剛才建立的格式添加

Elasticsearch基本操作,增,删,改,查

注意:我們id我們可以指定,也可以不指定,不指定就會幫我們自動建立一個。

看下添加的資料

Elasticsearch基本操作,增,删,改,查

 修改

修改es文檔方式有兩種,一種是直接修改,一種是腳本修改,我這邊隻介紹第一種。現在把剛才資料的性别改為女

Elasticsearch基本操作,增,删,改,查

 浏覽資料,可以看到資料修改成功

Elasticsearch基本操作,增,删,改,查

 删除

删除文檔

Elasticsearch基本操作,增,删,改,查

重新整理資料可以看到已經被删除

Elasticsearch基本操作,增,删,改,查

删除索引

Elasticsearch基本操作,增,删,改,查

索引已經都被我們删除

Elasticsearch基本操作,增,删,改,查

查詢

為了友善查詢,我預先插入了十條資料

Elasticsearch基本操作,增,删,改,查

 我們查詢文檔id為1的資料

Elasticsearch基本操作,增,删,改,查

 接下來進行條件查詢

 1.查詢所有

Elasticsearch基本操作,增,删,改,查

指定傳回的資料

Elasticsearch基本操作,增,删,改,查

 模糊比對查詢

Elasticsearch基本操作,增,删,改,查

 聚合查詢

Elasticsearch基本操作,增,删,改,查

 可以看到age字段12歲的有4個人,30歲的有兩個人。

對age字段進行聚合計算

Elasticsearch基本操作,增,删,改,查
Elasticsearch基本操作,增,删,改,查

 總共有10個數,最小的年齡為12歲,最大70歲,他們的平均值是27.7歲,加起來有277歲。

進階查詢

Query context(文本查詢)

習語比對 它與模糊比對的查詢比較,就比較精确了

{
    "query":{
        "match_phrase":{
            "name":"張三"
        }
    }
}      
Elasticsearch基本操作,增,删,改,查

 多個字段比對查詢

下列語句表示,張三這個字元串在兩個字段,name和gender有的都比對出來

{
    "query":{
        "multi_match":{
            "query":"張三",
            "fields":["name","gender"]
        }
    }
}      
Elasticsearch基本操作,增,删,改,查

 文法查詢

下列文法表示查詢字段含有張三或李四的資料

{
    "query":{
        "query_string":{
            "query":"張三 OR 李四"
        }
    }
}      
Elasticsearch基本操作,增,删,改,查

 确定字段文法查詢

{
    "query":{
        "query_string":{
            "query":"張三 OR 李四 OR 男",
            "fields":["name","country"]
        }
    }
}      
Elasticsearch基本操作,增,删,改,查

 結構化字段的查詢

下清單示查詢年齡在12歲的資料

{
    "query":{
        "term":{
            "age":12
        }
    }
}      
Elasticsearch基本操作,增,删,改,查

 範圍查詢

下列查詢年齡段12歲到100歲之間的資料

{
    "query":{
        "range":{
            "age":{
                "gte":12,
                "lte":100
            }
        }
    }
}      
Elasticsearch基本操作,增,删,改,查

Filter Context(條件過濾查詢)

 查詢過程中隻判斷文檔是否滿足條件,隻有Yes和No,這是與Query查詢所不同的,不用考慮查詢到的資料比對有多好。

下列查詢字段age為12歲的資料

{
    "query":{
        "bool":{
            "filter":{
                "term":{
                    "age":"12"
                }
            }
        }
    }
}      
Elasticsearch基本操作,增,删,改,查

 複合查詢

固定分數查詢(不支援match)

{
    "query":{
        "constant_score":{
            "filter":{
                "match":{
                    "name":"周"
                }
            }
        }
    }
}      
Elasticsearch基本操作,增,删,改,查

 分數為1的資料

{
    "query":{
        "constant_score":{
            "filter":{
                "match":{
                    "name":"周"
                }
            },
            "boost":1
        }
    }
}      

 下清單示OR的關系,名字等于張三或性别為nv的資料

{
    "query":{
        "bool":{
            "should":[
                {
                    "match":{
                        "name":"張三"
                    }
                },
                {
                    "match":{
                        "gender":"女"
                    }
                }
                ]
        }
    }
}      
Elasticsearch基本操作,增,删,改,查

 下清單示AND查詢name字段必須為張三,性别也要為女的資料,顯然我們的資料是沒有的

{
    "query":{
        "bool":{
            "must":[
                {
                    "match":{
                        "name":"張三"
                    }
                },
                {
                    "match":{
                        "gender":"女"
                    }
                }
                ]
        }
    }
}      
Elasticsearch基本操作,增,删,改,查

 下列查詢資料name字段必須包含有周,且性别為男,且等于12歲

{
    "query":{
        "bool":{
            "must":[
                {
                    "match":{
                        "name":"周"
                    }
                },
                {
                    "match":{
                        "gender":"男"
                    }
                }
                ],
                "filter":{
                    "term":{
                        "age":12
                    }
                }
                
        }
    }
}      
Elasticsearch基本操作,增,删,改,查

 下列查詢除張三以外的資料

{
    "query":{
        "bool":{
            "must_not":{
                "term":{
                    "name":"張三"
                }
            }
        }
    }
}      
Elasticsearch基本操作,增,删,改,查