MarkLogic 7 повышает релевантность

В 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. Ранжирование должно быть от Контент->Техно->Веселье. По сути, если это точное совпадение отображаемого имени, я хочу, чтобы MarkLogic ранжировал релевантность с коллекцией content, имеющей наивысшую релевантность.

Как я могу это сделать? Я использую библиотеку поиска.


person C Kingsley    schedule 25.02.2016    source источник
comment
Под «в коллекции контента» вы подразумеваете «в коллекции документов content» или просто «с корневым элементом Content»?   -  person grtjn    schedule 25.02.2016
comment
коллекция документов   -  person C Kingsley    schedule 25.02.2016


Ответы (3)


Ответ @navin rawat делает это при «записи», и я хотел указать, что вы также можете сделать это при «чтении». что из вашего комментария / вопроса к нему может быть тем путем, которым вы хотите пойти.

Когда вы говорите «библиотека поиска», вы имеете в виду поиск: библиотека поиска или cts: поиск?

Если это поиск: поиск, вы можете сделать это с помощью дополнительного запроса.

Что вам нужно сделать, так это использовать cts:collection-query(), а затем увеличить его счет, заключив cts:word-query() в cts:collection-query() в cts:and-query(). Затем в cts:word-query() используйте параметр веса. параметр веса позволяет «загрузить» оценку по частям запроса.

Ex:

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:word-query с cts:collection-query позволяет вам загружать «хит» на основе коллекции, в которой он находится.

cts:element-value-query() повышает оценку на основе элемента, в котором он находится, и точного параметра, указывающего marklogic искать именно этот текст.

Вам придется поиграть с цифрами в параметре веса.

person Tyler Replogle    schedule 25.02.2016

Есть два способа выполнить ваше требование.

  1. Вы должны вставить свой документ с $quality, чтобы он мог повысить вашу оценку релевантности.
  2. Вы можете использовать поля для увеличения веса разделов документов.
person Navin Rawat    schedule 25.02.2016
comment
Спасибо. первый вариант неприменим, так как документов довольно много и изменить качество документа будет сложно. Второй вариант, как мне использовать поля для увеличения веса? - person C Kingsley; 25.02.2016

Вы можете создать поле, содержащее эти три элемента, и присвоить им разный вес, а затем выполнить запрос значения поля в этом поле, и вы вернете результат в виде последовательности, которую вы ожидаете.

person Zaifa Xi    schedule 01.03.2016