MarkLogic 7提升了相关性

时间:2016-02-25 12:16:42

标签: marklogic marklogic-7

在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-&gt; Techno-&gt; Fun。基本上如果它与displayname完全匹配,我希望MarkLogic将与具有最高相关性的content集合的相关性排序。

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

3 个答案:

答案 0 :(得分:3)

@navin rawat的回答是“写”,我想指出你也可以在“阅读”上做到这一点。从你的评论/问题到他可能是你想去的方式。

当您说“搜索库”时,您的意思是搜索:搜索库或cts:搜索?

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

您要做的是使用cts:collection-query()然后通过将cts:word-query() cts:collection-query()包裹在cts:and-query()中来提高其得分。然后在cts:word-query()中使用权重参数。 weight参数允许您对查询的某些部分进行“启动”评分。

例如:

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-query cts:collection-query允许您根据其中的集合启动“点击”。

cts:element-value-query()根据其中的元素以及告知marklogic查找该确切文本的确切选项来提高分数。

您必须使用权重参数

中的数字

答案 1 :(得分:0)

有两种方法可以满足您的要求。

  1. 您应该使用$ quality插入文档,以便提高相关性得分。
  2. 您可以使用字段来增加文档各部分的权重。

答案 2 :(得分:0)

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