国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

Solr使用日期字段類型

2018-11-10 16:40 更新

Solr 日期格式

Solr 的日期字段(DatePointField,DateRangeField 和已過時(shí)的 TrieDateField)代表“datas”,如時(shí)間精確到毫秒的點(diǎn)。使用的格式是XML Schema規(guī)范中 dateTime 的規(guī)范化表示形式的限制形式,這是 ISO-8601 的一個(gè)受限子集。對(duì)于那些熟悉 Java 8 的人來說,Solr 使用 DateTimeFormatter.ISO_INSTANT 進(jìn)行格式化,并使用 “l(fā)eniency” 進(jìn)行解析。

如以下示例:

YYYY-MM-DDThh:mm:ssZ

其中:

  • YYYY 是表示年份。
  • MM 是表示月份。
  • DD 是表示月份的某一天。
  • hh 是表示一天24小時(shí)的時(shí)間。
  • mm 是表示分鐘。
  • ss 是表示秒。
  • Z 是一個(gè)字面的“Z”字符,表示該日期的字符串表示形式是 UTC。

請(qǐng)注意,不能指定時(shí)區(qū)。日期的字符串表示形式始終以協(xié)調(diào)世界時(shí) (UTC) 表示。這是一個(gè)示例值:

1972-05-20T17:33:18Z

如果您愿意,您可以選擇包含小數(shù)的秒數(shù),但任何超出毫秒的精度都將被忽略。下面是 sub-seconds 的示例值:

  • 1972-05-20T17:33:18.772Z
  • 1972-05-20T17:33:18.77Z
  • 1972-05-20T17:33:18.7Z

必須有一個(gè)領(lǐng)先的 "-" 符號(hào)在0000年前的日期,并且在9999年之后,Solr將會(huì)以一個(gè)領(lǐng)先的“+”來格式化日期。年0000被認(rèn)為是公元前1年;沒有公元 0 年或公元前 0 年的表達(dá)方法。

可能需要查詢轉(zhuǎn)義:

如您所見,日期格式包括分隔小時(shí)、分鐘和秒的冒號(hào)字符。因?yàn)槊疤?hào)是 Solr 最常見的查詢解析器的特殊字符,所以有時(shí)需要轉(zhuǎn)義,具體取決于您正在嘗試執(zhí)行的操作。
這通常是一個(gè)無效查詢:

 datefield: 1972-05-20T17:33:18.772Z

以下這些是有效的查詢:

  • datefield: 1972-05-20T17 \:33 \: 18.772Z
  • datefield: "1972-05-20T17:33:18.772Z"
  • datefield: [1972-05-20T17:33:18.772Z TO *]

日期范圍格式

Solr 的 DateRangeField 支持上面描述的時(shí)間段語法中的相同點(diǎn)(具有下面描述的日期數(shù)學(xué))以及更多的表達(dá)日期范圍。一類示例是截?cái)嗟娜掌?,它表示整個(gè)日期跨度到所指示的精度。另一個(gè)類使用范圍語法([ TO ])。下面是一些示例:

  • 2000-11:2000年11月的整個(gè)月
  • 2000-11T13:同樣,但在一天中的一個(gè)小時(shí)(1300至1400前,即下午1點(diǎn)至2點(diǎn))。
  • -0009:公元前10年,年份中的 0 是公元 0,也被認(rèn)為是公元前1年。
  • [2000-11-01 TO 2014-12-01]:指定的日期范圍在一天的分辨率。
  • [2014 TO 2014-12-01]:從 2014 年開始到 12 月的第一天結(jié)束。
  • [* TO 2014-12-01]:從最早的可代表時(shí)間到2014年12月12日的一天結(jié)束。

限制:范圍語法不支持嵌入日期數(shù)學(xué)。如果您指定了 DatePointField 支持的日期實(shí)例,并將日期數(shù)學(xué)截?cái)?,比?NOW/DAY,那么您仍然可以得到當(dāng)天的第一個(gè)毫秒,而不是整天的范圍。獨(dú)占范圍(使用{&})在查詢中工作,但不適用于索引范圍。

日期數(shù)學(xué)

Solr 的日期字段類型也支持日期數(shù)學(xué)表達(dá)式,這使得相對(duì)于固定時(shí)刻的時(shí)間創(chuàng)建變得容易,包括使用“NOW”的特殊值來表示的當(dāng)前時(shí)間。

日期數(shù)學(xué)表達(dá)式

日期數(shù)學(xué)表達(dá)式包括在指定的單位中添加一定量的時(shí)間,或者以指定單位四舍五入當(dāng)前時(shí)間。表達(dá)式可以鏈接并從左向右進(jìn)行評(píng)估。

例如:以下代表了兩個(gè)月后的時(shí)間點(diǎn):

NOW+2MONTHS

這是一天前:

NOW-1DAY

斜線用于表示舍入。這代表當(dāng)前小時(shí)的開始:

NOW/HOUR

下面的例子計(jì)算(精確到毫秒)時(shí)間為六個(gè)月和三天后的時(shí)間點(diǎn),然后將該時(shí)間點(diǎn)回溯到當(dāng)天的開始時(shí)間:

NOW+6MONTHS+3DAYS/DAY

請(qǐng)注意,雖然日期數(shù)學(xué)是相對(duì)于 NOW 是最常用的,但它也可以應(yīng)用于任何固定時(shí)間點(diǎn):

1972-05-20T17:33:18.772Z+6MONTHS+3DAYS/DAY

影響日期數(shù)學(xué)的請(qǐng)求參數(shù)

NOW

該 NOW 參數(shù)由 Solr 在內(nèi)部使用,以確保在分布式請(qǐng)求中的多個(gè)節(jié)點(diǎn)上分析一致的日期數(shù)學(xué)表達(dá)式。但是可以指定 Solr 使用任意時(shí)刻(過去或?qū)恚┑娜我鈺r(shí)刻覆蓋“ NOW” 的特殊值會(huì)影響日期數(shù)學(xué)表達(dá)式的所有情況。

它必須被指定為自紀(jì)元以來的(長(zhǎng)值)毫秒。

示例:

q=solr&fq=start_date:[* TO NOW]&NOW=1384387200000

TZ

默認(rèn)情況下,所有日期數(shù)學(xué)表達(dá)式都是相對(duì)于 UTC TimeZone 計(jì)算的,但是 TZ 可以指定該參數(shù)來覆蓋此行為,方法是強(qiáng)制所有基于日期的加法和舍入相對(duì)于指定的時(shí)區(qū)。

例如,下面的請(qǐng)求將使用范圍面來面向當(dāng)前月份,“每天”相對(duì) UTC:

http://localhost:8983/solr/my_collection/select?q=*:*&facet.range=my_date_field&facet=true&facet.range.start=NOW/MONTH&facet.range.end=NOW/MONTH%2B1MONTH&facet.range.gap=%2B1DAY
<int name="2013-11-01T00:00:00Z">0</int>
<int name="2013-11-02T00:00:00Z">0</int>
<int name="2013-11-03T00:00:00Z">0</int>
<int name="2013-11-04T00:00:00Z">0</int>
<int name="2013-11-05T00:00:00Z">0</int>
<int name="2013-11-06T00:00:00Z">0</int>
<int name="2013-11-07T00:00:00Z">0</int>
...
    

在本例中,“days” 將根據(jù)指定的時(shí)區(qū)進(jìn)行計(jì)算 - 包括任何適用的夏令時(shí)間調(diào)整:

http://localhost:8983/solr/my_collection/select?q=*:*&facet.range=my_date_field&facet=true&facet.range.start=NOW/MONTH&facet.range.end=NOW/MONTH%2B1MONTH&facet.range.gap=%2B1DAY&TZ=America/Los_Angeles
<int name="2013-11-01T07:00:00Z">0</int>
<int name="2013-11-02T07:00:00Z">0</int>
<int name="2013-11-03T07:00:00Z">0</int>
<int name="2013-11-04T08:00:00Z">0</int>
<int name="2013-11-05T08:00:00Z">0</int>
<int name="2013-11-06T08:00:00Z">0</int>
<int name="2013-11-07T08:00:00Z">0</int>
...

更多 DateRangeField 詳細(xì)信息

DateRangeField 幾乎是 DatePointField 所用地方的替代品。唯一的區(qū)別是,Solr 的 XML 或 SolrJ 響應(yīng)格式將存儲(chǔ)的數(shù)據(jù)作為一個(gè)字符串而不是一個(gè)日期。該字段的基礎(chǔ)索引數(shù)據(jù)會(huì)稍大一些。與時(shí)間單位對(duì)齊的查詢應(yīng)該比 TrieDateField 快,尤其是在 UTC 的情況下。

DateRangeField,顧名思義,其主要觀點(diǎn)是允許索引日期范圍。要做到這一點(diǎn),只需提供上面顯示的格式的字符串。它還支持在索引數(shù)據(jù)和查詢范圍之間指定3個(gè)不同的關(guān)系謂詞:

  • Intersects (默認(rèn))
  • Contains
  • Within

你可以通過查詢使用 oplocal-params 參數(shù)來指定謂詞,如下所示:

fq={!field f=dateRange op=Contains}[2013 TO 2018]

與大多數(shù)本地參數(shù)不同,op 實(shí)際上不是由任何查詢解析器(field)定義的,它是由字段類型定義的,在本例中為 DateRangeField。在上面的示例中,它將查找包含 (或等于) 范圍2013到2018的索引范圍的文檔。文檔中的多值重疊索引范圍有效地合并。

有關(guān) DateRangeField 示例用例,請(qǐng)參閱 Solr 的社區(qū) wiki。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)