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
集合的相关性进行排名。
我该怎么做?我正在使用搜索库。
有两种方法可以达到您的要求。
- 您应该插入具有 $quality 的文档,这样它可以提高您的相关性分数。
- 您可以使用字段来增加文档部分的权重。
@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-query
的 cts:word-query
允许您根据其所在的集合启动 "hit"。
cts:element-value-query()
正在根据其所在的元素和告诉 marklogic 查找该确切文本的确切选项来提高分数。
您必须尝试使用权重参数中的数字
您可以创建一个包含这三个元素的字段并赋予它们不同的权重,然后对该字段进行字段值查询,您将return得到您期望的结果。
在 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
集合的相关性进行排名。
我该怎么做?我正在使用搜索库。
有两种方法可以达到您的要求。
- 您应该插入具有 $quality 的文档,这样它可以提高您的相关性分数。
- 您可以使用字段来增加文档部分的权重。
@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-query
的 cts:word-query
允许您根据其所在的集合启动 "hit"。
cts:element-value-query()
正在根据其所在的元素和告诉 marklogic 查找该确切文本的确切选项来提高分数。
您必须尝试使用权重参数中的数字
您可以创建一个包含这三个元素的字段并赋予它们不同的权重,然后对该字段进行字段值查询,您将return得到您期望的结果。