iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0

這邊舉例幾個常用的範例,無法全部列舉出來

新增範例索引資料

POST 30day-000001/_doc/3?refresh=true
{
  "@timestamp": "2020-09-28T03:51:03",
  "message": "30day very good",
  "level": "INFO",
  "staus": 200
}

Match

匹配查詢match是個核心查詢。無論需要查詢什麼字段,match查詢都應該會是首選的查詢方式。它是一個高級全文查詢,這表示它既能處理全文字段,又能處理精確字段。

GET /30day-000001/_search
{
  "query": {
    "match": {
      "level": {
        "query": "INF",
        "fuzziness": "AUTO" #允許模糊程度
      }
    }
  }
}
GET /30day-000001/_search
{
  "query": {
    "match": {
      "message": {
        "query": "30day very not good",
        "operator": "AND" # 設定query匹配運算子,選項有AND和OR(預設是OR),範例這個搜尋是找不到資料的因為分詞裡沒有"not"這個字
      }
    }
  }
}

Term

Term可以用來精確匹配,精確匹配的值可以是數字、時間、布爾值

避免使用Term來搜尋text欄位

GET /30day-000001/_search
{
  "query": {
    "term": {
      "staus": {
        "value": 200, #要查詢的值
        "boost": 1.0 #關聯分數設定(預設1.0)
      }
    }
  }
}

Range

可用來範圍查詢

GET /30day-000001/_search
{
  "query": {
    "range": {
      "staus": {
        "gt": 100, #大於(gte大於或等於)
        "lt": 300, #小於(lte小於等於)
      }
    }
  }
}

Bool

Bool查詢,也可以稱作組合查詢

  • must 必須出現在匹配的文檔中,並將有助於評分。
  • filter 必須出現在匹配的文檔中。但是不像 must查詢的分數將被忽略。Filter子句在filter上下文中執行,這意味著評分被忽略,並且子句被考慮用於緩存。
  • should 應出現在匹配的文檔中。滿足這些條件中的任何條件都會增加評分,不匹配也不影響,should只會影響查詢結果的評分,並不會影響結果的內容
  • must_not 不得出現在匹配的文檔中。子句在過濾器上下文中執行,這意味著評分被忽略,並且子句被視為用於緩存。由於評分被忽略,0因此返回所有文檔的分數。
GET /30day-000001/_search
{
 "query":{
    "bool": {
      "filter": [
        {
          "match": {
            "level": "INFO"
          }
        }
      ],
      "must": {
        "match": {
          "staus": 200
        }
      }
    }
  }
}

上一篇
Day21-設定進階的Watcher-DSL介紹
下一篇
Day23-設定進階的Watcher-SQL查詢
系列文
Elastic Stack 是一把梭,用起來再說!!!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言