MarkLogic 9.0.8
在 UI 上,除了搜索文本外,很少应用过滤器,包括发布日期年份。由于我们无法控制最终用户如何在多行文本框中编写查询。
所以最后查询看起来像
- AU:Manish AND PY:>=2001 AND CT:Control AND UT:uncontrol AND PY:<=2010
- (AU:Manish AND PY:>=2001) OR (CT:Control AND UT:uncontrol AND PY:<=2010)
- AU:Manish AND CT:Control AND UT:uncontrol AND PY:>=2001 AND PY:<=2010
到目前为止,我们在查询的末尾处理了年份范围,并且正在使用以下代码
Qyery: AU:Manish AND CT:Control AND UT:uncontrol OR PY:>=2001 AND PY:<=2010
<additional-query>
{
cts:and-query((
cts:path-range-query("contg/sortdate/yr", ">=",xs:int($startYear)),
cts:path-range-query("contg/sortdate/yr", "<=",xs:int($endYear))))
}
</additional-query>
但是现在由于用户可以将年份范围放在查询文本中的任何位置,因此它无法按预期工作
那么我们可以直接在约束中写入条件以及如何在其中放入额外的查询吗?
<constraint name="Year">
<range type="xs:int" facet="false">
<path-index>article/date/year</path-index>
</range>
</constraint>
预期行为
如果用户通过年份范围,则应返回给定范围内的文档,否则将不适用年份范围