JBr*_*haw 6 lucene solr recommendation-engine solrnet morelikethis
我正在尝试Solr的MoreLikeThis功能。
我的架构处理文章,并且我正在三个字段中寻找文章之间的相似性:文章标题,文章文本和主题。
以下查询工作良好:
q=id:(2e2ec74c-7c26-49c9-b359-31a11ea50453)
&rows=100000000&mlt=true
&mlt.fl=articletext,articletitle,topic&mlt.boost=true&mlt.mindf=1&mlt.mintf=1
Run Code Online (Sandbox Code Playgroud)
但是我想尝试增加不同的查询字段,例如,增加文章标题的相似性。
该文档(http://wiki.apache.org/solr/MoreLikeThis)建议,可以通过包含mlt.qf属性来实现此目的,并有所增强。
我对这种查询的尝试如下:
q=id:(2e2ec74c-7c26-49c9-b359-31a11ea50453)&rows=100000000&mlt=true
&mlt.fl=articletext,articletitle,topic&mlt.boost=true
&mlt.mindf=1&mlt.mintf=1
&mlt.qf=articletext^0.1 articletitle^100 topic^0.1
Run Code Online (Sandbox Code Playgroud)
但是,提升似乎没有影响-不管我提供什么提升,建议都保持不变(除了上面的查询,我会大力支持标题的相似性,但这似乎没有发生)
我在以这种方式使用MoreLikeThis的文档中找不到任何示例,这使我相信自己出了点问题。
有没有人设法实现这样的目标?
如果您的推荐要求很简单,只有一个字段需要匹配,或者几个字段具有同等重要性,那么 MLT 组件会非常有用。但是,任何时候您想要改变不同字段的相对重要性,或者需要做一些更具体的事情,例如包含反距离提升,那么您可能需要编写自己的伪 MLT 处理程序。MLT 处理程序所做的就是根据源文档中的 tf.idf 分数指定的字段生成顶级术语。您可以在生成自定义 SOLR OR 查询的某些代码中轻松模拟该功能。您将失去术语向量的优势,但只要您的查询大小合理(例如 < 20 个术语),它可能会表现得很好。我们有一个小索引,因此生成我们自己的包含数百个术语的 MLT 查询,并且它的执行时间在可接受的范围内(几毫秒)。但是,我发现这种行为在具有几亿文档和较大字段的大型索引上有所恶化,在这些情况下,您需要将查询限制为少量顶级术语。使用您自己的代码代替 MLT 需要更多工作,但您会获得更多灵活性。