日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Elasticsearch中如何进行日期(数值)范围查询

發(fā)布時(shí)間:2025/3/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elasticsearch中如何进行日期(数值)范围查询 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 1 范圍查詢的符號(hào)
  • 2 數(shù)值范圍查詢
  • 3 時(shí)間范圍查詢
    • 3.1 簡(jiǎn)單查詢示例
    • 3.2 關(guān)于時(shí)間的數(shù)學(xué)表達(dá)式(date-math)
    • 3.3 關(guān)于時(shí)間的四舍五入
  • 4 日期格式化范圍查詢(format)
  • 5 時(shí)區(qū)范圍查詢(time_zone)

1 范圍查詢的符號(hào)

符號(hào)含義
gtegreater-than or equal to, 大于或等于
gtgreater-than, 大于
lteless-than or equal to, 小于或等于
ltless-than, 小于

2 數(shù)值范圍查詢

需求: 查詢商品中40 <= price <= 80的文檔:

GET book_shop/_search {"query": {"range": {"price": {"gte": 40,"lte": 80,"boost": 2.0 // 設(shè)置得分的權(quán)重值(提升值), 默認(rèn)是1.0}}} }

3 時(shí)間范圍查詢

3.1 簡(jiǎn)單查詢示例

需求: 查詢網(wǎng)站中最近一天發(fā)布的博客:

GET website/_search {"query": {"range": {"post_date": {"gte": "now-1d/d", // 當(dāng)前時(shí)間的上一天, 四舍五入到最近的一天"lt": "now/d" // 當(dāng)前時(shí)間, 四舍五入到最近的一天}}} }

3.2 關(guān)于時(shí)間的數(shù)學(xué)表達(dá)式(date-math)

Elasticsearch中時(shí)間可以表示為now, 也就是系統(tǒng)當(dāng)前時(shí)間, 也可以是以||結(jié)尾的日期字符串表示.

在日期之后, 可以選擇一個(gè)或多個(gè)數(shù)學(xué)表達(dá)式:

  • +1h —— 加1小時(shí);
  • -1d —— 減1天;
  • /d —— 四舍五入到最近的一天.

下面是Elasticsearch支持?jǐn)?shù)學(xué)表達(dá)式的時(shí)間單位:

表達(dá)式含義表達(dá)式含義
yM
w星期d
h小時(shí)H小時(shí)
m分鐘s

說明: 假設(shè)系統(tǒng)當(dāng)前時(shí)間now = 2018-10-01 12:00:00 :

  • now+1h: now的毫秒值 + 1小時(shí), 結(jié)果是: 2018-10-01 13:00:00.
  • now-1h: now的毫秒值 - 1小時(shí), 結(jié)果是: 2018-10-01 11:00:00.
  • now-1h/d: now的毫秒值 - 1小時(shí), 然后四舍五入到最近的一天的起始, 結(jié)果是: 2018-10-01 00:00:00.
  • 2018.10.01||+1M/d: 2018-10-01的毫秒值 + 1月, 再四舍五入到最近一天的起始, 結(jié)果是: 2018-11-01 00:00:00.

3.3 關(guān)于時(shí)間的四舍五入

對(duì)日期中的日、月、小時(shí)等 進(jìn)行四舍五入時(shí), 取決于范圍的結(jié)尾是包含(include)還是排除(exclude).

向上舍入: 移動(dòng)到舍入范圍的最后一毫秒;

向下舍入: 一定到舍入范圍的第一毫秒.

舉例說明:

① “gt”: “2018-12-18||/M” —— 大于日期, 需要向上舍入, 結(jié)果是2018-12-31T23:59:59.999, 也就是不包含整個(gè)12月.

② “gte”: “2018-12-18||/M” —— 大于或等于日期, 需要向下舍入, 結(jié)果是 2018-12-01, 也就是包含整個(gè)12月.

③ “l(fā)t”: “2018-12-18||/M” —— 小于日期, 需要向上舍入, 結(jié)果是2018-12-01, 也就是不包含整個(gè)12月.

④ “l(fā)te”: “2018-12-18||/M” —— 小于或等于日期, 需要向下舍入, 結(jié)果是2018-12-31T23:59:59.999, 也就是包含整個(gè)12月.

4 日期格式化范圍查詢(format)

格式化日期查詢時(shí), 將默認(rèn)使用日期field中指定的格式進(jìn)行解析, 當(dāng)然也可以通過format參數(shù)來覆蓋默認(rèn)配置.

示例:

GET website/_search {"query": {"range": {"post_date": {"gte": "2/1/2018", "lte": "2019","format": "dd/MM/yyyy||yyyy"}}} }

注意: 如果日期中缺失了部分年、月、日, 缺失的部分將被填充為unix系統(tǒng)的初始值, 也就是1970年1月1日.

比如, 將dd指定為format, 像"gte": 10將轉(zhuǎn)換為1970-01-10T00:00:00.000Z.

5 時(shí)區(qū)范圍查詢(time_zone)

如果日期field的格式允許, 也可以通過在日期值本身中指定時(shí)區(qū), 從而將日期從另一個(gè)時(shí)區(qū)的時(shí)間轉(zhuǎn)換為UTC時(shí)間, 或者為其指定特定的time_zone參數(shù).

示例:

GET website/_search {"query": {"range": {"post_date": {"gte": "2018-01-01 00:00:00","lte": "now","format": "yyyy-MM-dd hh:mm:ss","time_zone": "+1:00"}}} }

ES中的日期類型必須按照UTC時(shí)間格式存儲(chǔ), 所以, 上述的2018-01-01 00:00:00將被轉(zhuǎn)換為2017-12-31T23:00:00 UTC.

另外需要注意的是, now是不受time_zone影響的.

總結(jié)

以上是生活随笔為你收集整理的Elasticsearch中如何进行日期(数值)范围查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。