Допустим, у меня есть особый свитер с code:blue-sweater
, то есть color:blue
.Я хотел бы найти похожие продукты, используя поле description
, с условием, что подобные продукты не синего цвета (-color:blue
).
Из Solr wiki :
Если вы хотите отфильтровать аналогичные результаты, предоставленные MoreLikeЭто вам необходимо использовать MoreLikeThisHandler.Он будет рассматривать аналогичный набор результатов документа в качестве основного, поэтому к нему будут применены указанные фильтры (fq).Если вы используете MoreLikeThisComponent и применяете фильтры запросов, он будет применен к результирующему набору, возвращаемому основным запросом (QueryComponent), а не к набору, возвращенному MoreLikeThisComponent.
Это параметры I 'м с использованием;параметр qt
устанавливает обработчик запроса как MoreLikeThis
:
{
q: "code:"blue-sweater"",
qt: "mlt",
mlt: "true",
fl: "description,brand,gender,price",
mlt.boost: "true",
mlt.fl: "description",
fq: "-color:"blue"",
rows: "6",
mlt.mintf: "0",
mlt.mindf: "0"
}
Проблема заключается в том, что я могу указать параметр FilterQuery
только один раз, что устанавливает fq
для обоих исходных запросов ("код: "blue-sweater") и для результатов MoreLikeThis).
Поскольку фильтр -color:blue
исключает мой первоначальный запрос (синий свитер), у меня не осталось результатов MoreLikeThis. Как мне получитьвокруг этого?
Если единственными продуктами в ядре являются color:blue
, я все еще хочу их вернуть, но они должны быть в нижней части возможных результатов.
Редактировать
Я немного покопался, и кажется, что единственный способ повысить запрос MoreLikeThis - это mlt.qf
:
Поля запроса и их повышения, используя те жеформат, используемый в анализаторе запросов DisMax. Эти поля также должны быть указаны в mlt.fl. ( source )
Я попытался выполнить обычный запрос с помощью DisMaxсинтаксический анализатор с ограничением значения (например, in_stock:[* TO 10]
), но с ограничением на полеЗначение d полностью игнорируется.Вы можете делать только обычные бусты на поле (color^2
).
Таким образом, кажется, что это ограничение MoreLike, так как оно полагается на анализатор DisMax вместо EdisMax
.