包含已排除父级的子项的MarkLogic字段索引加权规则

时间:2016-04-27 18:17:02

标签: indexing marklogic marklogic-8

来自MarkLogic's documentation on fields

  

如果一个字段有两个或多个具有不同权重的元素,并且如果其中一个元素是另一个元素的子元素,则使用父元素的权重,并忽略子元素的权重。

但是,当祖先和后代具有权重并且后代的直接父母被排除时,不清楚会发生什么。例如,假设我有一份文件:

<X>
  <A>
    <B>
      <C>

<X>(root)已从字段中排除,<A>包含weight=1<B>被排除,<C>包含在weight=2中1}}。 <C>中某个字词的字段匹配是用1还是2加权? (有没有办法检查索引权重如何对分数做出贡献,以确认这样的配置是否按预期工作?)

1 个答案:

答案 0 :(得分:1)

我进行了快速测试,这似乎与文档相矛盾。我创建了一个名为test的字段。它排除了根和元素B,但包括A重量为1.0B重量为&#39; 2.0&#39;。然后我在QConsole中运行以下内容:

xdmp:document-insert("/field-test-X.xml", <X>test</X>, (), "field-test"),
xdmp:document-insert("/field-test-XA.xml", <X><A>test</A></X>, (), "field-test"),
xdmp:document-insert("/field-test-XAB.xml", <X><A><B>test</B></A></X>, (), "field-test"),
xdmp:document-insert("/field-test-XABC.xml", <X><A><B><C>test</C></B></A></X>, (), "field-test"),
xdmp:document-insert("/field-test-XAC.xml", <X><A><C>test</C></A></X>, (), "field-test"),
xdmp:document-insert("/field-test-XC.xml", <X><C>test</C></X>, (), "field-test")
;

cts:search(collection("field-test"), cts:field-word-query("test", "test")) ! (xdmp:node-uri(.) || " - " || cts:score(.))

它让我回答:

/field-test-XABC.xml - 30976
/field-test-XC.xml - 30976
/field-test-XAC.xml - 30976
/field-test-XA.xml - 22528

这告诉我们,元素test中的单词C会得到更高的分数,无论它是直接在A内,还是在B之间。 ,甚至是自己的。在所有情况下,结果得分最高,这表明应用了更高的提升。

HTH!