ElasticSearch有關查詢的那些事
上一篇文章介紹了一下ElasticSearch的一些基礎的索引,檔案的CRUD方法,接下來介紹一些花式查詢的操作
修改
在說查詢之前先補充一下之前沒講到的修改功能的內容
全量修改
現在先重新創建一個新的索引以及下的檔案以便觀察的更直觀一點
創建索引laptop
PUT http://localhost:9200/laptop
在laptop下創建檔案 id號為114514,1919,810
POST http://localhost:9200/laptop/doc/114514
http://localhost:9200/laptop/doc/1919
http://localhost:9200/laptop/doc/810
Body插入的JSON串(3個)
{
"brand":"平果",
"model":"軍工級主板,航天級cpu",
"price":"1999",
"memory":{
"level_1":"512G",
"level_2":"1T",
"level_3":"2T"
}
},
{
"brand":"大米",
"model":"散熱出色的筆記本",
"price":"2999",
"memory":{
"level_1":"512G",
"level_2":"1T",
"level_3":"2T"
}
},
{
"brand":"三新",
"model":"可能會爆炸",
"price":"3999",
"memory":{
"level_1":"512G",
"level_2":"1T",
"level_3":"2T"
}
}
創建好啦 現在開始進行全量修改的操作,作為三新的廠商我覺得這個model型號太難聽了,而且我都記憶體要再升級加多一個level_4的3T版本,我們應該這樣操作
PUT http://localhost:9200/laptop/_doc/810

最后查詢發現全域更改成功

區域修改
如果我們只是覺得價錢太貴了想降下價而去修改全域這會不會未免太浪費了,那應該如何去改單個價格?
POST http://localhost:9200/laptop/_update/810

修改過后發現價錢已經改變

查詢
條件查詢
如果我在庫中只想挑選三新的電腦應該如何操作,接下來就用條件查詢了,插入json形式的請求體獲得想要的資料
GET http://localhost:9200/laptop/_search
BODY RAW JSON
{
"query":{
"match":{
"brand":"三新"
}
}
}
最后得到的結果
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.3862942,
"hits": [
{
"_index": "laptop",
"_type": "_doc",
"_id": "810",
"_score": 1.3862942,
"_source": {
"brand": "三新",
"model": "sanxing pro max",
"price": "3888",
"memory": {
"level_1": "512G",
"level_2": "1T",
"level_3": "2T",
"level_4": "3T"
}
}
}
]
}
}
分頁查詢
分頁查詢也是相似的操作
GET http://localhost:9200/laptop/_search
BODY RAW JSON
{
"query":{
//match_all 指查詢全部檔案
"match_all":{
}
},
//from 從第幾頁開始
"from" : 0,
//size 每一頁看到幾個資料
"size" : 2
}
執行后的查詢結果
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "laptop",
"_type": "_doc",
"_id": "114514",
"_score": 1.0,
"_source": {
"brand": "平果",
"model": "軍工級主板,航天級cpu",
"price": "1999",
"memory": {
"level_1": "512G",
"level_2": "1T",
"level_3": "2T"
}
}
},
{
"_index": "laptop",
"_type": "_doc",
"_id": "1919",
"_score": 1.0,
"_source": {
"brand": "大米",
"model": "散熱出色的筆記本",
"price": "2999",
"memory": {
"level_1": "512G",
"level_2": "1T",
"level_3": "2T"
}
}
}
]
}
}
哇上面的資料好多 我只想知道他們的品牌和價錢就夠了,那價格_source就OK啦
BODY RAW JSON
{
"query":{
//match_all 指查詢全部檔案
"match_all":{
}
},
//from 從第幾頁開始
"from" : 0,
//size 每一頁看到幾個資料
"size" : 2
"_source":["brand","price"]
}
執行后的查詢結果
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "laptop",
"_type": "_doc",
"_id": "114514",
"_score": 1.0,
"_source": {
"price": "1999",
"brand": "平果"
}
},
{
"_index": "laptop",
"_type": "_doc",
"_id": "1919",
"_score": 1.0,
"_source": {
"price": "2999",
"brand": "大米"
}
}
]
}
}
那么再給他們的價錢排一下順序咯 我喜歡從大到小desc,小到大就是asc咯
BODY RAW JSON
{
"query":{
//match_all 指查詢全部檔案
"match_all":{
}
},
//from 從第幾頁開始
"from" : 0,
//size 每一頁看到幾個資料
"size" : 2,
"_source":["brand","price"],
"sort":{
"price":{
"order":"desc"
}
}
}
//接下來得到的結果會報錯
因為是price是一個字串無法將字串自動轉數字進行排序,大家要注意這一點
聚合查詢
還是一樣的GET請求url,此時我想按品牌來分組就要使用到聚合查詢啦
GET http://localhost:9200/laptop/_search
BODY RAW JSON
{
"aggs":{//聚合操作
"price_group":{//名稱,隨意起名
"terms":{//分組
"field":"brand" //分組欄位
}
}
}
}
接下來還有映射查詢,多條件查詢,范圍查詢等操作,有興趣的同學可以上官網去查詢相關的檔案,
[Getting Started | Elasticsearch Reference 6.0] | Elastic
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290033.html
標籤:其他
