MarkLogic搜索年龄的计算桶

问题描述 投票:2回答:1

我需要使用出生日期的索引为人年龄范围约束配置计算桶。分段的年龄范围是19-30,31-40,41-50等形式。由于可能的锚定值相当有限,我无法设置它。例如,如果今天是2019-01-01,年龄在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

marklogic facet bucket
1个回答
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属性。

© www.soinside.com 2019 - 2024. All rights reserved.