2017-02-06 1 views
0

Как я могу указать при создании индекса, что одно поле должно получать больше релевантности, чем другое поле?Индекс Cloudant Lucene с различной релевантностью по полю

Пример: У меня есть документы с заголовком и полем описания и вы хотите, чтобы содержимое поля заголовка было более важным во время запроса.

doc1: Название: "Привет, мир", описание: "Только приветствие" doc2: Название: "Привет", описание: "Привет всем Привет, привет"

индекс ("по умолчанию" , doc.title); индекс ("default", doc.description);

Поиск термина «привет» должен возвращать doc1 с более высокой релевантностью, чем doc2, потому что слово «привет» присутствует в поле заголовка, хотя doc2 содержит слово 3 раза.

Как это можно сделать?

ответ

1

Вы можете указать повышение на времени запроса например. если вы индексных пунктов отдельно

index("title", doc.title); 
index("description", doc.description); 

Затем во время запроса Ваш может указать, что заголовок получает больший вес, чем поле Описание

q=(title:hello)^100 OR (description:hello) 

где ^100 указывает, что этот термин усиливается. См. https://docs.cloudant.com/search.html#query-syntax

+0

Спасибо, Глинн. Это звучит как вариант. Конечно, мой индекс по умолчанию использует данные из более чем 10 различных полей, что делает запрос довольно длинным, когда я должен добавить их все. Может быть, что-то вроде этого может работать: 'q =" hello "ИЛИ (title:" hello ")^100' –

+0

Да, Glynn, это хорошо работает для отдельных слов, но быстро становится сложным с несколькими поисковыми терминами. 'q = hello world OR ((title: hello)^100 OR (title: world)^100)' Если я ищу точную строку, мне нужно разбить их на отдельные комбинации полей. В противном случае для полевого сейкра используется только первое слово. –

+0

Это должно быть 'q = hello AND world OR ((title: hello)^100 AND (title: world)^100)' –

Смежные вопросы