MarkLogic搜索年龄计算的存储桶

时间:2019-03-12 20:51:06

标签: marklogic facet bucket

我需要使用出生日期的索引为一个人的年龄范围约束配置计算桶。存储的年龄范围的格式为19-30、31-40、41-50等。由于可能的锚点值非常有限,因此我很难进行设置。例如,如果今天是2019年1月1日,对于19-30岁的年龄段,我需要输入出生日期,从1988-01-02(年龄最大的30岁)到2000-01-01(年龄最小的19岁) )。如何配置该计算桶?

对于“ lt”属性,如果我使用 lt =“-P19Y” ,则得到的结果少于2000-01-01,因此1999-12-31是我的上次包含生日,从而排除了那些今天已经19岁的人。

对于“ ge”属性,如果我使用 ge =“-P31Y” ,则包括1988-01-01的生日,该日期超出了我的预期范围,即那个人今天才31岁。

如果我可以将“明天”和“昨天”用作锚点,那么这些值将起作用。或者,如果我可以为ge指定一个值,表示“减去31年加1天”,那也可以。但鉴于局限性,我不确定如何进行这项工作。有没有人使用出生日期索引用存储桶配置人员年龄限制?

TIA

1 个答案:

答案 0 :(得分:0)

我相信您正在寻找计算时段的“开始日”锚点选项。

  <constraint name="age">
    <range type="xs:date">
      <element name="birthdate"/>
      <computed-bucket name="18" ge="-P18Y" 
       anchor="start-of-day">18 and under</computed-bucket>
      <computed-bucket name="19-30" ge="P30Y" lt="-P18Y" 
       anchor="start-of-day">19 to 30</computed-bucket>
      <computed-bucket name="31-40" ge="-P40Y" lt="-P30Y" 
       anchor="start-of-day">31 to 40</computed-bucket>
      <computed-bucket name="41-50" ge="-P50Y" lt="-P40Y" 
       anchor="start-of-day">41 to 40</computed-bucket>
      <computed-bucket name="51" lt="-P50Y" 
       anchor="start-of-day">51 and older</computed-bucket>
    </range>
  </constraint>

可以在这里找到文档: http://docs.marklogic.com/guide/search-dev/search-api#id_22725

编辑:最初具有所需存储桶的ge和lt属性。