比方说,我有一个特别的毛衣code:blue-sweater是color:blue.我想找到使用该description领域的类似产品,其约束条件是类似的产品不是blue(-color:blue).
来自Solr维基:
如果你想过滤MoreLikeThis给出的类似结果,你必须使用MoreLikeThisHandler.它会将类似的文档结果集视为主要结果集,因此将对其应用指定的过滤器(fq).如果使用MoreLikeThisComponent并应用查询过滤器,它将应用于主查询(QueryComponent)返回的结果集,而不是应用于MoreLikeThisComponent返回的结果集.
这些是我正在使用的参数; 所述qtPARAM设置请求处理程序为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"
}
Run Code Online (Sandbox Code Playgroud)
问题是我只能指定FilterQuery一次参数,它fq为初始查询("code:"blue-sweater")和MoreLikeThis结果设置.
由于过滤器-color:blue排除了我的初始查询(蓝色毛衣),我没有更多喜欢这个结果.我该如何解决这个问题?
如果核心中的唯一产品是color:blue,我仍然想要归还它们,但它们应该是可能结果的底部.
编辑
我做了一些挖掘,似乎提升MoreLikeThis查询的唯一方法是mlt.qf:
使用与DisMax Query Parser使用的格式相同的格式查询字段及其提升.这些字段也必须在mlt.fl中指定.(来源)
我试图使用具有值约束(如in_stock:[* TO 10])的DisMax解析器进行常规查询,但是对字段值的约束将被完全忽略.你只能对一个字段(color^2)进行简单的提升.
因此,似乎这是对MoreLike的限制.这依赖于DisMax解析器而不是EdisMax解析器.