Можно ли использовать SOLR MoreLike, чтобы использовать разные поля для модели и совпадений? - PullRequest
1 голос
/ 22 октября 2010

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

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

Я не вижу способа использования полей mlt.fl или бустов mlt.qf для достижения этого эффекта в одном запросе. (Кажется, mlt.fl определяет поля, используемые как для обнаружения «интересных терминов», так и для соответствия этим терминам.) Я что-то упустил?

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

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

Ответы [ 2 ]

1 голос
/ 25 октября 2010

Я вижу два варианта:

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

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

0 голосов
/ 08 сентября 2012

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

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

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

(Поскольку интересным в этом начальном запросе является только то, что интересно, то есть условияоценка работы.)

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

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

...