Когда вы выполняете copyField в Solr, добавляет ли поле boost?
Скажем, у меня есть эти объявления полей:
<field name="Title" type="text_general" stored="true" multiValued="false" />
<field name="Body" type="text_general" stored="true" multiValued="false" />
Когда я индексирую "Заголовок", я устанавливаю boost на 5, то есть слова в поле "Название" должны считаться для 5x нормальным.
Затем я делаю это:
<copyField source="Title" dest="SearchText"/>
<copyField source="Body" dest="SearchText"/>
Итак, я скопировал оба поля в другое поле под названием "SearchText".
Когда я ищу "SearchText", это термины из поля "Заголовок", все еще несущего 5-кратный импульс? Или они теряют это в копии? Когда вы делаете copyField, увеличивается ли повышение всех полей?
Ответы
Ответ 1
После некоторого чтения я думаю, что форсирование лишится. Наше решение заключалось в следующем:
Мы создали четыре поля: SearchText, SearchText2, SearchText3 и SearchText4. Мы копируем все в SearchText, некоторые вещи в SearchText2, меньше всего в SearchText3 и только суперкритичные вещи в SearchText4.
Затем наш параметр "qf" выглядит так:
SearchText, SearchText2^3, SearchText3^10, SearchText4^100
Итак, мы увеличиваем поля на 3, 10 и 100 во время запроса.
Он выглядит не изящно, но он работает хорошо, и он позволяет нам корректировать усиление без переиндексации.
Кроме того, здесь есть слой абстракции: например, помещая что-то в SearchText2, мы говорим "Это важно", однако мы не определяем, насколько важно (с точки зрения числового повышения) до времени запроса. Таким образом, copyField является абстракцией и параметром "qf" в реализации.
Ответ 2
Насколько я знаю, повышение зависит от поля на основе. Итак, если вы применили повышение к полю "Название", то поле "SearchText" не имеет такого же повышения. Вам нужно будет дать дополнительный импульс в поле "SearchText", чтобы увеличить количество совпадений.
Ответ 3
Когда вы выполняете copyfield
, форматирование поля не копируется с ним. Однако есть простое решение, которое не требует изменения ваших запросов.
Если вы сделаете несколько copyfield
для одного и того же поля, оно будет скопировано несколько раз в результат, тем самым увеличив его вес.
Итак, для достижения 5-кратного веса титула вы можете просто сделать copyfield
пять раз.
<copyField source="Title" dest="SearchText"/>
<copyField source="Title" dest="SearchText"/>
<copyField source="Title" dest="SearchText"/>
<copyField source="Title" dest="SearchText"/>
<copyField source="Title" dest="SearchText"/>
<copyField source="Body" dest="SearchText"/>