2

在 MarkLogic 中,我可以提高某些文档的相关性得分。

例如,如果我有一个存储在content集合中的文档,如下所示:

<Content xmlns="http://test.ww/common/content/v1.0">
  <DisplayName>Testing DisplayName</DisplayName>
</Content>

而且我还有另一个文档存储在techno集合中,如下所示

<Techno xmlns="http://test.ww/common/content/v1.0">
    <DisplayName>Testing DisplayName</DisplayName>
</Techno>

我在fun集合中有另一个文档,XML 如下

<Fun xmlns="http://test.ww/common/content/v1.0">
    <DisplayName>Testing DisplayName</DisplayName>
</Fun> 

如果我搜索 term testing displayname,我希望内容集合中的文档应该比techno集合中的文档具有更高的相关性。排名应该从内容->技术->乐趣。基本上,如果它与显示名称完全匹配,我希望 MarkLogic 将相关性与content具有最高相关性的集合进行排名。

我怎样才能做到这一点?我正在使用搜索库。

4

3 回答 3

3

@navin rawat 的答案是在“写入”时执行此操作,我想指出您也可以在“读取”时执行此操作。从您对他的评论/问题来看,这可能是您想要的方式。

当您说“搜索库”时,您是指搜索:搜索库还是 cts:搜索?

如果是搜索:搜索,您可以使用附加查询来执行此操作。

您要做的是使用,然后通过将 a a包装在 an 中cts:collection-query()来提高其分数。然后在使用权重参数。weight 参数允许您对部分查询进行“引导”评分。cts:word-query()cts:collection-query()cts:and-query()cts:word-query()

前任:

let $queryText := "query here"
return 
  cts:search(
     fn:doc(),
     cts:or-query((
      cts:and-query((
       cts:word-query($queryText, (), 6.0),
       cts:collection-query("Content")
     )),
     cts:and-query((
      cts:word-query($queryText, (),4.0),
      cts:collection-query("Techno")
     )),
     cts:and-query((
      cts:word-query($queryText, (),2.0),
      cts:collection-query("Fun")
    )),
    cts:element-value-query(xs:QName("DisplayName"), $queryText, "exact", 16.0)
 )


    ))

cts:word-querywith允许您根据cts:collection-query其所在的集合启动“命中”。

cts:element-value-query()是基于它所在的元素和告诉marklogic寻找确切文本的确切选项来提高分数。

您必须使用权重参数中的数字

于 2016-02-25T14:45:13.160 回答
0

有两种方法可以实现您的要求。

  1. 您应该使用 $quality 插入您的文档,以便它可以提高您的相关性得分。
  2. 您可以使用字段来增加文档部分的权重。
于 2016-02-25T13:39:14.087 回答
0

您可以创建一个包含这三个元素的字段并赋予它们不同的权重,然后对该字段进行字段值查询,您将按照您期望的顺序返回结果。

于 2016-03-01T05:52:00.857 回答