придание веса терминам SynonymFilterFactory - PullRequest
1 голос
/ 01 июля 2019

Есть ли способ в Solr придать вес синонимам? (генерируется SynonymFilterFactory)

Более длинный вариант вопроса / немного предыстории:

Мы хотели бы придать меньший вес синонимам слов / терминов, введенным SynonymFilterFactory. Так что точные совпадения становятся выше score.

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

Не могу найти это в документации.

Есть ли способ для Solr присваивать веса терминам, производимым SynonymFilterFactory?

Любые указатели высоко ценятся.

PS. Другой вариант использования - для точной настройки каждого синонима с определенным весом. для каждого конкретного синонима (т.е. synonyms = "synonyms.txt" будет 3 колонны а не 2). Кажется, в настоящее время это невозможно, поэтому, возможно, просто статический Вес для всех синонимов, описанных выше, был бы возможен.

1 Ответ

1 голос
/ 02 июля 2019

Как и в большинстве случаев с Lucene, решение состоит в том, чтобы использовать несколько полей - одно поле с расширенными синонимами и одно без.Таким образом, вы можете решить, выполнять ли поиск с включенными синонимами вообще, или вы можете оценивать попадания в разных полях с разными весами - и вы можете корректировать эти веса на основе вашего запроса.В Solr вы использовали copyField для индексации одного и того же контента в обоих полях, а затем вы можете отрегулировать весовые коэффициенты при использовании edismax с field^5 field_with_synonyms для оценки попаданий без синонимов в пять раз выше, чем с синонимами.

Если вы действительно хотите сделать это в одном, одном поле, потребуется гораздо более хрупкая и настраиваемая настройка, где вы можете использовать полезные нагрузки, прикрепленные к каждому токену , чтобы вручную оценить каждыйтокен по-другому, но это более сложный вариант использования, который не будет вписываться в остальную функциональность.Это решит ваш PS вариант использования.Я также рекомендовал бы проверить одну из презентаций Lucene / Solr Revolution о вариантах использования для оценки полезной нагрузки.

Использование двух полей - это простой способ, использование полезных нагрузок - более гибкая,но также более продвинутый способ.

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

Возвращаемое значение вычисляется с использованием min, max илисреднее из декодированных полезных нагрузок.Специальная первая функция может использоваться вместо других для короткого замыкания перечисления терминов и возврата только декодированной полезной нагрузки первого члена.

Указанное поле должно иметь возможность кодирования с плавающей или целочисленной полезной нагрузкой (через DelimitedPayloadTokenFilter или NumericPayloadTokenFilter).Если полезная нагрузка для термина не найдена, возвращается значение по умолчанию.

payload(field_name,term): значение по умолчанию - 0,0, используется средняя функция.

payload(field_name,term,default_value): значение по умолчанию может бытьконстанта, имя поля или другая функция, возвращающая число с плавающей точкой.используется средняя функция.

payload(field_name,term,default_value,function): значения функции могут быть минимальными, максимальными, средними или первыми.

Файл, используемый с DelimitedPayloadTokenFilter, имеет формат token|payloadи позволяет вам присоединить любое числовое значение в качестве «полезной нагрузки» для этого токена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...