假设我有一件code:blue-sweater
的特殊毛衣,即color:blue
。我想使用description
字段查找类似产品,但要限制类似产品不是蓝色(-color:blue
)。
来自Solr wiki:
如果您要过滤MoreLikeThis给出的相似结果,则您 必须使用MoreLikeThisHandler。它将考虑类似 文档结果集为主要结果,因此将应用指定的结果 对其进行过滤(fq)。如果您使用MoreLikeThisComponent并应用 查询过滤条件,它将应用于由 主查询(QueryComponent),而不是主查询返回的查询 MoreLikeThisComponent。
这些是我正在使用的参数; 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
参数,从而为初始查询(“代码:” blue-sweater”)和“更多类似结果”都设置fq
。 / p>
由于-color:blue
的过滤器不包含我的初始查询(蓝色毛衣),因此我没有MoreLikeThis结果。我该如何解决?
如果核心产品中唯一的产品是color:blue
,我仍然想退货,但是它们应该位于可能结果的底部。
修改
我做了一些挖掘工作,看来增强MoreLikeThis查询的唯一方法是使用mlt.qf
:
查询字段及其增强内容的格式与 DisMax查询解析器。这些字段也必须在 mlt.fl (source)
我尝试使用具有值约束(例如in_stock:[* TO 10]
)的DisMax解析器进行常规查询,但是对字段值的约束被完全忽略。您只能在字段(color^2
)上进行普通增强。
因此,这似乎是MoreLikeThis的限制,它依赖于DisMax解析器而不是EdisMax
解析器。