cts:element-range-query的权重参数不影响结果序列。
下面是包含示例文档和范围查询并且已实现权重的文档,但不会对订单产生任何影响。您能告诉我们如何确保传递给范围查询时不同的权重值会提供不同的输出记录序列。
Create a document /dates.xml in Mraklogic with some data:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<entry>
<date>2007-01-01</date >
enter code here
<info>Some information.</info>
</entry>
<entry>
<date>2006-06-23</date>
<info>Some other information.</info>
</entry>
<entry>
<date>1971-12-23</date>
<info>Some different information.</info>
</entry>
</root>
在日期创建范围索引,数据类型为Date。 现在尝试运行查询:
cts:search(fn:doc("/dates.xml")/root/entry,
cts:or-query((
cts:element-range-query(xs:QName("date"), ">=",
xs:date("2007-01-01"),(),-16),
cts:element-range-query(xs:QName("date"), "=",
xs:date("2006-06-23"),(),+16))))
权重参数的任何变化都会产生相同的记录序列
答案 0 :(得分:2)
entry
中的所有dates.xml
元素都属于同一文档。因此,它们共享相同的索引条目并具有相同的评分信息。这就是改变权重不会改变结果的原因。您可以使用cts:score
确认。
MarkLogic是一个面向文档的数据库。它索引文件。格式化XML,使每个文档在关系数据库中充当行。避免创建尝试像表一样的大型文档。在这种情况下,我将为每个entry
元素创建一个文档。然后查询术语权重应该按预期工作。
强调自己的一种方法是简化您对cts:search
的调用:只使用doc()
或collection()
,并将所有约束放在第二个参数中{{1 }}。您正在搜索匹配的完整文档。
也可以使用子片段,但我不推荐它。
答案 1 :(得分:2)
默认情况下,范围查询根本不会对分数做出贡献。您需要使用score-function参数来选择非零评分。