kibana數據操作


1.創建索引

# 語法:
PUT /<index>

# 示例:
PUT /laowang
PUT xiaowang

2.創建數據

# 語法
PUT /<index>/_doc/<_id>
POST /<index>/_doc/
PUT /<index>/_create/<_id>
POST /<index>/_create/<_id>

index:索引名稱,如果索引不存在,會自動創建
_doc:類型
<_id>:唯一識別符,創建一個數據時,可以自定義ID,也可以讓他自動生成


# ES 存儲數據三個必要構成條件,每一條數據必須有以下的數據結構
構成條件 說明
_index 索引(數據存儲的地方)
_type 類型(數據對應的類)
_id 數據唯一標識符

3.指定 ID 插入數據(PUT)

PUT /student/user/4
{
  "name":"congtianqi",
  "sex":"male"
}

# 一般不用此方式插入數據
# —— 需要修改 ID 值
# —— 當指定 ID 時,插入數據時會查詢數據對比 ID 值,若 ID 相同,則會覆蓋更新原來的數據

4.隨機ID插入數據(post)

# ES 會隨機生成一個較長字符串作為此條數據的唯一 ID 標識
POST /student/user/
{
  "name":"xiaoliu",
  "gender":"female"
}

5.添加指定字段

# 推薦使用方法
POST /student/user/
{
  "id":"1",
  "name":"xiaoliu",
  "gender":"female"
}

6.查詢數據

1.簡單查詢

# 查看所有索引信息
GET /_all
GET _all

# 查看所有索引的數據
GET /_all/_search

# 查看指定索引信息
GET /student

# 查看指定索引的數據
GET /student/_search

# 查看指定數據
GET /student/user/1

2.條件查詢
1). —term 代表完全匹配,也就是精確查詢,搜索前不會再對搜索詞進行分詞,例如,我們要搜索標題(title)為 "北京烤鴨" 的所有文檔:

# 方法一:
GET /news/_search
{
  "query": {
    "term": {			    
      "title": {
        "value": "北京烤鴨"
      }
    }
  }
}

# 可以省略 value 行,與 Key 合並到一行
GET /news/_search
{
  "query": {
    "term": {		       <-------- 使用 term 匹配,適用於精確查找
      "title":"北京烤鴨"        <------- 簡寫,並為一行
    }
  }
}

2). — match 代表模糊匹配,先對搜索詞進行分詞,例如,我們要搜索標題(title)為 "北京烤鴨" 的文檔時,會先將 "北京烤鴨" 分詞為 "北京" 和 "烤鴨",符合兩者其一的,都會取到結果:

# 方法二:
GET /news/_search
{
  "query": {
    "match": {			<-------- 使用 match 匹配,適用於模糊查找
      "title": "北京烤鴨"
    }
  }
}

3.多條件查詢(Bool)

Bool 查詢現在包括四種子句:must,filter,should,must_not

1).Bool 查詢現在包括四種子句:must,filter,should,must_not

# 查詢條件必須全部滿足
GET /student/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "age": {
              "value": "23"
            }
          }
        },
        {
          "term": {
            "name": {
              "value": "wqh"
            }
          }
        }
      ]
    }
  }
}


2).— filter 查詢:查詢條件必須全部滿足,類似 SELECT 語句中的 AND,與 must 不同的是,不會計算相關性分數:

# 跟 must 一樣,在數據量很大時,比 must 查詢快一點,因為不用計算相關分
GET /student/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "age": {
              "value": "23"
            }
          }
        },
        {
          "term": {
            "name": {
              "value": "wqh"
            }
          }
        }
      ]
    }
  }
}


3).— should 查詢:查詢條件滿足其一即可,類似 SELECT 語句中的 OR,會計算相關性分數:

# 多條件查詢時,查詢條件只要有一個滿足就可以
GET /student/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "age": {
              "value": "23"
            }
          }
        },
        {
          "term": {
            "name": {
              "value": "wqh"
            }
          }
        }
      ]
    }
  }
}


4).— must_not 查詢:查詢條件必須不滿足,類似 SELECT 語句中的 NOT,會計算相關性分數:

# must_not 中的條件,必須全部不滿足
GET /student/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "term": {
            "age": {
              "value": "23"
            }
          }
        },
        {
          "term": {
            "name": {
              "value": "wqh"
            }
          }
        }
      ]
    }
  }
}


5). — must + should 查詢:

# 查詢年齡是 23歲 或者年齡是 18歲 並且名字是 j 的數據
GET /student/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "age": {
              "value": "23"
            }
          }
        },
        {
          "bool": {
            "must": [
              {
                "term": {
                  "age": {
                    "value": "18"
                  }
                }
              },
              {
                "term": {
                  "name": {
                    "value": "wqh"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

6).范圍查詢:

GET /student/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "age": {
              "gte": 20,
              "lte": 25
            }
          }
        }
      ]
    }
  }
}

7.修改數據

# 修改數據時指定 ID 修改
PUT /student/user/1
{
  "name":"霧山火行",
  "gender":"male",
  "age":"18"
}

# 注意,修改數據時,除了要修改的值,其他字段的值也要帶上,否則原有的其他字段會丟失
PUT /student/user/2
{
  "name":"wqh",
  "gender":"male",
  "age":"19"
}

8.刪除數據

# 刪除指定 ID 數據
DELETE /student/user/4

# 刪除索引(別瞎刪,可以用 ES-head 關閉索引)
DELETE /student

9.總結

Query Context(不帶 Filter) 與 Filter Context#
①. — Query Context 即指所有不使用 Bool 查詢中的 Filter(過濾器)的上下文查詢

②. — Filter Context 指 Bool 查詢中,使用 Filter(過濾器)的上下文查詢

查詢在 Query 查詢上下文和 Filter 過濾器上下文中,執行的操作是不一樣的:

①. — 查詢上下文:是在使用 query 進行查詢時的執行環境,比如使用 search 的時候。
在查詢上下文中,查詢會回答這個問題——“這個文檔是否匹配,它的相關度高么?”
ES中索引的數據都會存儲一個 _score 分值,分值越高就代表越匹配。即使 lucene 使用倒排索引,對於某個搜索的分值計算還是需要一定的時間消耗 。

②. — 過濾器上下文:在使用 filter 參數時候的執行環境,比如在 bool 查詢中使用 Must_not 或者 filter
在過濾器上下文中,查詢會回答這個問題——“這個文檔是否匹配?”
它不會去計算任何分值,也不會關心返回的排序問題,因此效率會高一點。
另外,經常使用過濾器,ES會自動的緩存過濾器的內容,這對於查詢來說,會提高很多性能。

總而言之:
①. — 查詢上下文:查詢操作不僅僅會進行查詢,還會計算分值,用於確定相關度;

②. — 過濾器上下文:查詢操作僅判斷是否滿足查詢條件,不會計算得分,查詢的結果可以被緩存,所以速度快

所以,根據實際的需求是否需要獲取得分,考慮性能因素,選擇不同的查詢子句;如果不需要獲得查詢詞條的相關性分數,盡量使用 Filter 。


免責聲明!

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



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