【问题标题】:MarkLogic field index weighting rules for included child with excluded parent包含子项与排除父项的 MarkLogic 字段索引加权规则
【发布时间】:2016-08-22 05:21:45
【问题描述】:

来自MarkLogic's documentation on fields

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

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

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

&lt;X&gt;(root) 从字段中排除,&lt;A&gt; 包含在 weight=1 中,&lt;B&gt; 排除在外,&lt;C&gt; 包含在 weight=2 中。与&lt;C&gt; 中的术语匹配的字段是用 1 加权还是用 2 加权? (有什么方法可以检查索引权重对分数的影响,以确认这样的配置是否按预期工作?)

【问题讨论】:

    标签: indexing marklogic marklogic-8


    【解决方案1】:

    我进行了快速测试,这似乎与文档相矛盾。我创建了一个名为test 的字段。它不包括根和元素B,但包括权重为1.0A 和权重为“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!

    【讨论】:

    • 等等.. 文档对于cts:field-value-query 似乎是正确的,但对于cts:field-word-query 则不正确。行为似乎不一致。无论如何我都会提交错误报告..
    • 非常有趣...所以当术语匹配出现在后代元素中时,使用cts:field-value-query 它根据祖先权重进行评分,或者cts:field-word-query 它获得后代的分数?
    猜你喜欢
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多