Можно ли использовать Solr Morelikethis различные поля для модели и совпадений?

StackOverflow https://stackoverflow.com/questions/3994423

  •  10-10-2019
  •  | 
  •  

Вопрос

Допустим, у меня есть документы с двумя полями, A и B.

Я хотел бы использовать Solr's Morelikethis, но с изюминкой: меня больше всего интересуют повышение документов, поле, поле, похожее на поле By Document B. (То есть извлеките «интересные термины» MLT из поля модели B, но собирайте только результаты MLT на основе поля A.)

Я не вижу способа использовать поля MLT.FL или повышение MLT.QF для достижения этого эффекта в одном запросе. (Похоже, что MLT.FL указывает поля, используемые как для обнаружения «интересных терминов», так и соответствующих этим терминам.) Я упускаю какой -то вариант?

Или мне придется извлечь «интересные термины» сам и поменять сведения «поля: термин»?

(Другие идеи в этом же духе также ценятся.)

Это было полезно?

Решение 2

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

Первый вариант: выполните начальный запрос MLT с Обработчик MLT, добавление параметра &mlt.interestingTerms=details. Анкет Это включает в себя список терминов, которые считались интересными, ранжированными с их относительными повышениями. Обычное поведение использует эти обнаруженные термины против одних и тех же полей MLT.FL, чтобы найти аналогичные документы. Например, ответ будет включать в себя что -то вроде:

"interestingTerms": 
    ["field_b:foo",5.0,"field_b:bar",2.9085307,"field_b:baz",1.67070794]

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

Явно переосмысливая эту интересную информацию в новую или запрос field_a:foo^5.0 field_a:bar^2.9085307 field_a:baz^1.67070794 Смысл использование примера примера в поле B, чтобы найти документы, которые похожи в поле A, и может имитировать именно то, какой вид запроса MLT делает в своем обычном поле модели.

Второй вариант: возьмите фактический текст поля B документа модели и подайте его непосредственно как Содержание тела, чтобы использоваться вместо запроса, для указания модельного документа. Затем нацелены на MLT.FL в поле A ради сбора аналогичных результатов. Например, фрагмент параметров может быть …&stream.body=foo bar baz&mlt.fl=field_a&…. Анкет Опять же, чистый эффект заключается в том, что модель текста, родом из Field_b, находит документы, аналогичные только в Field_a.

Другие советы

Два варианта, которые я вижу:

  1. Используйте CopyField - индексируйте свой исходный документ с копией поля A, названного B, а затем запросите, используя B.
  2. Расширьте Morelikethishandler и измените поля, которые вы запрашиваете.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top