Es使用kibana增刪改查以及復雜查詢


1.簡單操作

1.1 增加

先插入四條數據

PUT /esstudy/user/1
{
  "name": "張三",
  "age": 21
}
PUT /esstudy/user/2
{
  "name": "李四",
  "age": 22
}
PUT /esstudy/user/3
{
  "name": "王五",
  "age": 23
}
PUT /esstudy/user/4
{
  "name": "趙六",
  "age": 24
}

看一下數據:

 

如果說數據存在那么便是覆蓋(全量覆蓋)

PUT /esstudy/user/1
{
  "name": "法外狂徒張三",
  "age": 21,
  "desc": "法律大牛"
}

再執行

GET /esstudy/user/1

PUT /esstudy/user/2
{
  "name": "李四"
}

已經修改了 那么 PUT 可以更新數據但是。麻煩的是 原數據你還要重寫一遍要 這不符合我們規矩。

 1.2 更新

使用 POST 命令,在 id 后面跟 _update ,要修改的內容放到 doc 文檔(屬性)中即可。
POST /esstudy/user/3/_update
{
  "doc":{
    "name": "王五升級",
    "age": 23
  }
}

 

1.3 刪除

DELETE /xxx

1.4 獲取

GET /xxx

5.查詢

GET esstudy/user/_search?q=name:趙六
通過 _serarch?q=name:狂神說 查詢條件是name屬性有趙六的那些數據。
我們看一下結果 返回並不是 數據本身,是給我們了一個 hits ,還有 _score得分,就是根據算法算出和
查詢條件匹配度高得分就搞。

2.復雜查詢

2.1 查詢所有

GET esstudy/user/_search
{
  "query": {
    "match_all": {}
  }

}

 

2.2 構建查詢 

再插入一條數據

PUT /esstudy/user/5
{
  "name": "張三",
  "age": 21
}

再進行查詢

GET esstudy/user/_search
{
  "query": {
    "match": {
      "name": "法外狂徒張三"
    }
  }
}

 

 通過分數來查看誰更加符合結果

2.3限制屬性

通過 _source 來控制,比如說只需要名字的屬性
GET esstudy/user/_search
{
  "query": {
    "match": {
      "name": "張三"
    }
  },
  "_source": ["name"]
}

 2.4 排序

根據年齡倒序

GET esstudy/user/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

 

2.5 分頁

GET esstudy/user/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ], 
  "from": 0,
  "size": 2
}

 

 2.6 布爾查詢

1. must

都要符合

例如。查詢名字是張三,年齡是21的

GET esstudy/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "張三"
          }
        },
        {
          "match": {
            "age": 21
          }
        }
      ]
    }
  }
  
}

 

 2. should

只要滿足一個即可

GET esstudy/user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "name": "張三"
          }
        },
        {
          "match": {
            "age": 22
          }
        }
      ]
    }
  }
  
}

 

3. must_not

查詢不滿足條件的,即過濾操作

GET esstudy/user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "name": "張三"
          }
        },
        {
          "match": {
            "age": 22
          }
        }
      ]
    }
  }
  
}

 

 4. filter

gt 表示大於
gte 表示大於等於
lt 表示小於
lte 表示小於等於 
GET esstudy/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "張三"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 20,
            "lte": 40
          }
        }
      }
    }
  }
  
}

2.7 term精確查詢

關於分詞:

term 查詢是直接通過倒排索引指定的詞條,也就是精確查找。
term和match的區別:
  • match是經過分析(analyer)的,也就是說,文檔是先被分析器處理了,根據不同的分析器,分析出的結果也會不同,在會根據分詞 結果進行匹配
  • term是不經過分詞的,直接去倒排索引查找精確的值。
注意 ⚠ :我們現在 用的es7版本 所以我們用 mappings properties 去給多個字段(fifields)指定類型的時
候,不能給我們的索引制定類型:

 創建規則

PUT testdb
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "desc": {
        "type": "keyword"
      }
    }
  }
}

 插入數據:

PUT testdb/_doc/1
{
  "name": "法外狂徒1號",
  "desc": "法外狂徒1號decs"
}
PUT testdb/_doc/2
{
  "name": "法外狂徒2號",
  "desc": "法外狂徒2號decs"
}

總結:keyword 字段類型不會被分析器分析! 
然后使用term查詢
GET testdb/_search
{
  "query": {
    "term": {
      "desc": "法外狂徒2號decs"
    }
  }
}

可以看到結果只有一個

 如果只查詢法外狂徒那么一個都沒有

GET testdb/_search
{
  "query": {
    "term": {
      "desc": "法外狂徒"
    }
  }
}

 

精確查詢多個值:

GET esstudy/user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "age": "22"
          }
        },
        {
          "term": {
            "age": 21
          }
        }
      ]
    }
  }
  
}

2.8 高亮顯示

GET esstudy/user/_search
{
"query": {
"match": {
"name": "張三"
}
},
"highlight": {
"fields": {
"name": {}
}
}

}

 可以看到加上了em標簽,當然我們也可以自定義。

GET esstudy/user/_search
{
  "query": {
    "match": {
      "name": "張三"
    }
  },
  "highlight": {
    "pre_tags": "<p class='key' style='color:red'>", 
    "post_tags": "</p>", 
    "fields": {
      "name": {}
    }
  }
  
}

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM