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

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

3 ответа

Решение

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

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

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

Что вы хотите сделать, это использовать cts:collection-query() а затем повысить свой счет, завернув cts:word-query() а cts:collection-query() в cts:and-query(), Тогда в cts:word-query() используйте весовой параметр. Параметр weight позволяет "загружать" оценку по частям запроса.

Пример:

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 искать этот точный текст.

Вам придется поиграться с числами в параметре веса

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

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

  1. Вы должны вставить свой документ с качеством $, чтобы он мог повысить ваш показатель релевантности.
  2. Вы можете использовать поля для увеличения веса разделов документов.
Другие вопросы по тегам