iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 27
0
Elastic Stack on Cloud

Hey~有聽說資安跟ELK有一腿嗎?系列 第 27

Day27 深入解析Elasticsearch Query DSL Range query

Hello大家,
真的把今年的國定假日都過完了...
有點哀傷!
下次的連續假期是跨年了,
讓我們一起哀傷兩個半月來迎接下個連假吧!

之前有提到Range query的使用方法,
能夠進行的內容包刮容量大小、IP、日期等,
其中能設定的內容有大於、小於等等:
gt:大於
gte:大於等於
lt:小於
lte:小於等於

關於日期,
有些時間的記法因為時區的原因跟我們所在時區不一致時,
我們就要利用time_zone進行調整,
寫法就會是"time_zone": "+[時間]"

"time_zone": "+08:00"

另外相關性的調整又來拉~
跟前面說的fuzzy的概念有點相似,
我們可以藉由設定boost來調整查詢結果的相關性,
boost預設值為1.0,
0~1.0之間的分數會顯示與查詢內容較遠(不相關)的內容
大於1.0的話則會增加其相關性。
Elasticsearch針對每一個doc都會在進行搜索時給予一個匹配度的分數,
設定boost則是用來決定是否要放寬這個條件,
要不要讓匹配度較低的結果也顯示出來。

日期的設定方式比較特別,
如果我們要查詢今天以前的範圍,
所以我們就要找比大於等於(今天-1)的日期
並且小於等於今天
所以說下法就是
"gte":"now-1d/d,
"lt":"now/d"
那如果是一個小時內的話也是相同的概念
"gte":"now-1h/h,
"lt":"now/h"
完整的寫法如下

{
  "query": {
    "range": {
      "[Field]": {
        "[條件1]": "[內容1]",
        "[條件2]": "[內容1]"
      }
    }
  }
}
{
  "query": {
    "range": {
      "date": {
        "gte":"now-1h/h,
        "lt":"now/h"
      }
    }
  }
}

如果要加入時區的話

{
  "query": {
    "range": {
      "date": {
        "time_zone": "+01:00",        
        "gte":"now-1h/h,
        "lt":"now/h"                  
      }
    }
  }
}

上一篇
Day26 深入解析Elasticsearch Query DSL Fuzzy query
下一篇
Day28 深入解析Elasticsearch Query DSL Match query Part1
系列文
Hey~有聽說資安跟ELK有一腿嗎?30

尚未有邦友留言

立即登入留言