constraints - 如何根据 Marklogic 中的用户输入创建自定义日期范围?

标签 constraints xquery marklogic faceted-search

我正在开发一个用 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>

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

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

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

谢谢!

最佳答案

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

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

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

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

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

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

呵呵!

关于constraints - 如何根据 Marklogic 中的用户输入创建自定义日期范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21708862/

相关文章:

xquery - XQuery 中的运算符 "=>"有什么作用?

sql-server-2005 - 如何在 SQL Server 2005 中创建复合唯一约束

PHP Postgres 约束违规 - 我可以以某种方式获取约束名称吗?

xquery - 在支持多种输出格式的 exist-db 中编写一个 XQuery 脚本

sql - 使用MS SQL修改XML列

javascript - Marklogic xdmp.rollback() : Cannot read property 'result' of null

marklogic - corb2 与 MarkLogic 的兼容性检查

.net - F# 泛型约束

mysql - 更换mysql数据库上的约束,总是失败

xml - Xquery:获取前一周的天数