在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
集合的相关性排序。
我该怎么做?我正在使用搜索库。
答案 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)
有两种方法可以满足您的要求。
答案 2 :(得分:0)
您可以创建一个包含这三个元素的字段并赋予它们不同的权重,然后对该字段进行字段值查询,您将返回结果作为您期望的序列。