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


MarkLogic’s documentation on fields开始:

If a field has two or more elements with different weights and, if one of those elements is a child of another element, then the weight of the parent element is used and the weight of the child element is ignored.

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

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

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

最佳答案 我进行了快速测试,这似乎与文档相矛盾.我创建了一个名为test的字段.它排除了根和元素B,但包括重量为1.0的A和重量为“2.0”的B.然后我在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

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

HTH!

点赞