iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
DevOps

Elastic Stack(ELK)數據圖表化與異常監控系列 第 9

Day09 Kibana - Query DSL 複合查詢

這一個章節節我們要來介紹複合查詢,當單一的查詢子句無法完成需求時,為了應付這種高級查詢需求,所以就產生這種能夠把多個查詢子句組合起來的語法,就稱為複合查詢。

複合查詢

複合查詢就是指可以對多個查詢子句進行結合查詢資料,並且計算資料相關得分。bool query就是將這些結果和得分整理後並回傳。

bool query用bool操作,包含的子句類型如下:

must
- 算分
- 回傳結果必需滿足所有符合的子句條件
- 類似SQL中的AND
filter
- 不算分
- 回傳結果必需滿足所有符合的子句條件
- 用法和must相似
should
- 算分
- 滿足這些條件中的任何條件都會增加評分_score,不滿足也不影響回傳結果

如果語法中有must語句,則should語句就沒有匹配的要求。
如果語法中沒有must語句,最少需要匹配一條should語句。

must_not
- 不算分
- 回傳結果必需不滿足must_not條件
- 類似SQL中的NOT

範例一:

{
  "bool": {
    "must": {
      "match": {
        "title": "elasticsearch"
      }
    },
    "should": [
      {
        "match": {
          "tag": "13th"
        }
      },
      {
        "range": {
          "date": {
            "gte": "2014-01-01"
          }
        }
      }
    ]
  }
}

title欄位符合elasticsearch的所有資料
tag欄位有再符合13th的資料,分數權重會在增加
date欄位有大於等於2014-01-01的資料,分數權重會在增加

範例二:

{
  "bool": {
    "must": {
      "match": {
        "title": "elasticsearch"
      }
    },
    "should": [
      {
        "match": {
          "tag": "13th"
        }
      }
    ],
    "filter": {
      "range": {
        "date": {
          "gte": "2014-01-01"
        }
      }
    }
  }
}

range查詢己經從should語句轉移到filter語句,表示已轉換成不評分的查詢,將不會再響相關分數計算。

Reference


上一篇
Day08 Kibana - Query DSL 查詢語法介紹
下一篇
Day10 Kibana - 過濾器
系列文
Elastic Stack(ELK)數據圖表化與異常監控30

尚未有邦友留言

立即登入留言