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 искать этот точный текст.
Вам придется поиграться с числами в параметре веса
Вы можете создать поле, содержащее эти три элемента, и придать им различный вес, а затем выполнить запрос поля-значения к этому полю, вы вернете результат в ожидаемой последовательности.
Есть два способа удовлетворить ваши требования.
- Вы должны вставить свой документ с качеством $, чтобы он мог повысить ваш показатель релевантности.
- Вы можете использовать поля для увеличения веса разделов документов.