【问题标题】:How to create custom date ranges based on user input in Marklogic?如何根据 Marklogic 中的用户输入创建自定义日期范围?
【发布时间】:2014-02-11 17:30:11
【问题描述】:

我正在开发一个用 XQuery 编写的现有 Marklogic 应用程序。我们目前有一个存储桶限制,允许在定义的日期范围设置分面,如下所示:

<constraint name="date" xmlns="http://marklogic.com/appservices/search">
    <range type="xs:gYear">
      <element ns="http://digital.library.ptsem.edu/ia" name="date"/>
      <bucket name="any-1800" lt="1801">–1800</bucket>
      <bucket name="1801-1825" ge="1801" lt="1826">1801–1825</bucket>
      <bucket name="1826-1850" ge="1826" lt="1851">1826–1850</bucket>
      <bucket name="1851-1875" ge="1851" lt="1876">1851–1875</bucket>
      <bucket name="1876-1900" ge="1876" lt="1901">1876–1900</bucket>
      <bucket name="1901-1925" ge="1901" lt="1926">1901–1925</bucket>
      <bucket name="1926-any" ge="1926">1926–</bucket>
    </range>
  </constraint>

用户目前可以通过点击 UI 中的相应方面来选择这些日期范围。

我想做的是允许用户在表单中输入开始日期和结束日期,以便按自定义日期范围进行搜索。例如,他们可以在文本表单中输入 1950 - 1970 并搜索此范围。我认为这些自定义范围可能可以通过从搜索选项中删除当前日期桶约束来实现,而是使用范围约束,这样我们就可以在查询文本中执行类似 (date-start:1800 AND date-end:1900) 的操作.另一种选择是根据用户输入的年份即时设置存储桶约束。

我真的不知道从哪里开始或最好的方法是什么。有没有人做过类似的事情或对如何最好地实现这一点提出建议?

谢谢!

【问题讨论】:

标签: constraints xquery marklogic faceted-search


【解决方案1】:

从约束中删除存储桶将使您失去当前的方面。所以这听起来不像是一种选择。

我不确定,但我希望您已经可以使用您所描述的日期限制。唯一的问题是,据我所知,-start 和 -end 表示法是 Corona 风格的,并且 search:search 和 search:parse 需要像“date GE 1800 AND date LT 1900”这样的语法。上面 joemfb 的评论中提到的链接也提到了这种语法。

如果由于存储桶而无法以这种方式处理当前日期约束,则只需设置两个约束即可。一个 dateFacets 包含用于构面的存储桶,另一个用于自定义搜索。

如果您愿意,可以进行一些预解析。如果您看到日期:1950-1970 之类的模式,您可以使用字符串函数将其重写为日期 GE/LT 表达式。给定固定模式应该是可行的。也这样做了,在运行时没有问题。

生成自定义存储桶也可以。如果很容易为特定的搜索模式生成一个特殊的桶。实际上,我在上面提到的博客文章上发表了评论,只是为了这样做。

所以,实际上还有很多路要走。

HTH!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    相关资源
    最近更新 更多