Правила взвешивания индекса поля MarkLogic для включенного дочернего элемента с исключенным родителем

Из документации MarkLogic по полям:

Если поле содержит два или более элементов с разными весами и если один из этих элементов является дочерним по отношению к другому элементу, то используется вес родительского элемента, а вес дочернего элемента игнорируется.

Но неясно, что происходит, когда предок и потомок имеют веса, а прямой родитель потомка исключается. Например, скажем, у меня есть документ:

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

<X>(корень) исключается из поля, <A> включается в weight=1, <B> исключается, а <C> включается в weight=2. Будет ли поле, совпадающее с термином в <C>, иметь вес 1 или 2? (И есть ли способ проверить, как индексированные веса влияют на оценку, чтобы убедиться, что подобная конфигурация работает должным образом?)


person wst    schedule 27.04.2016    source источник


Ответы (1)


Я провел быстрый тест, и это, похоже, противоречит документации. Я создал поле под названием test. Он исключает корень и элемент B, но включает A с весом 1.0 и B с весом 2,0. Затем я запустил в 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 между ними, или даже само по себе. Во всех случаях результат получает наивысший балл, что указывает на то, что было применено более высокое усиление.

ХТХ!

person grtjn    schedule 24.05.2018
comment
Подождите... документы кажутся правильными для cts:field-value-query, но не для cts:field-word-query. Поведение кажется нелогичным. Я все равно напишу отчет об ошибке .. - person grtjn; 24.05.2018
comment
Очень интересно... так что, когда совпадение термина встречается в элементе-потомке, при использовании cts:field-value-query оно оценивается на основе веса предка, или при cts:field-word-query оно получает оценку потомка? - person wst; 29.05.2018