MarkLogic 7 提升相关性

MarkLogic 7 boost relevance

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

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

我该怎么做?我正在使用搜索库。

有两种方法可以达到您的要求。

  1. 您应该插入具有 $quality 的文档,这样它可以提高您的相关性分数。
  2. 您可以使用字段来增加文档部分的权重。

@navin rawat 的回答是在 "write" 上做,我想指出你也可以在 "read" 上做。从你的 comment/question 到他可能就是你想要的方式。

当您说 "search library" 时,您指的是 search:search 图书馆还是 cts:search?

如果是 search:search,您可以通过附加查询来完成此操作。

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

例如:

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:collection-querycts:word-query 允许您根据其所在的集合启动 "hit"。

cts:element-value-query() 正在根据其所在的元素和告诉 marklogic 查找该确切文本的确切选项来提高分数。

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

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