Marklogic cts中的权重:元素范围查询

Marklogic cts中的权重:元素范围查询,marklogic,Marklogic,cts:element范围查询的权重参数不影响结果的顺序 下面的文档包含一个示例文档和一个实现了权重的范围查询,但对订单没有任何影响。您能告诉我们如何确保传递到范围查询时不同的权重值将提供不同的输出记录序列吗 Create a document /dates.xml in Mraklogic with some data: <?xml version="1.0" encoding="UTF-8"?> <root> <entry> <date>20

cts:element范围查询的权重参数不影响结果的顺序

下面的文档包含一个示例文档和一个实现了权重的范围查询,但对订单没有任何影响。您能告诉我们如何确保传递到范围查询时不同的权重值将提供不同的输出记录序列吗

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>
权重参数的任何更改都会导致相同的记录序列

dates.xml中的所有条目元素都是同一文档的一部分。因此,它们都共享相同的索引条目,并具有相同的评分信息。这就是为什么改变权重不会改变结果。您可以使用cts:score确认这一点

MarkLogic是一个面向文档的数据库。它为文档编制索引。格式化XML,使每个文档都像关系数据库中的一行。避免创建类似于表的大型文档。在本例中,我将为每个条目元素创建一个文档。然后,查询项权重应按预期工作

强迫自己这样做的一种方法是简化对cts:search的调用:只需使用doc或collection,并将所有约束作为cts:query放在第二个参数中。很明显,您正在搜索匹配的整个文档


也可以使用子片段,但我不建议这样做。

默认情况下,范围查询对分数没有任何影响。您需要使用score函数参数来选择非零评分

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))))