我正在试验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但我想尝试提升不同的查询字段-例如,将更多的权重放在文章标题中。
文档(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然而,提升似乎没有任何影响-无论我提供了什么提升,推荐仍然是相同的(我想除了上面的问题,以大大支持标题的相似性,但这似乎没有发生)
我在文档中找不到以这种方式使用MoreLikeThis的任何示例,这让我认为我搞错了。
有没有人能做到这样的事情?
发布于 2014-09-01 02:28:02
如果您有简单的推荐需求,其中只有一个字段要匹配,或者有几个同等重要的字段,则MLT组件非常有用。但是,任何时候你想改变不同字段的相对重要性,或者需要做一些更具体的事情,比如包括反向距离提升,那么你可能会想要编写自己的伪MLT处理程序。MLT处理程序所做的全部工作就是根据源文档中指定的字段的tf.idf分数生成顶级术语。您可以很容易地在生成自定义SOLR OR查询的一些代码中模拟该功能。您将失去术语向量的优势,但只要您的查询大小合理(例如< 20个术语),它可能会表现得相当好。我们有一个很小的索引,所以生成我们自己的包含数百个术语的MLT查询,并且它在可接受的时间内(几毫秒)执行。但是,我已经看到这种行为在包含少量1亿个文档和较大字段的大型索引上有所恶化,在这种情况下,您需要将查询限制为少量的热门术语。使用您自己的代码代替MLT是一项更多的工作,但您可以获得更多的灵活性。
发布于 2016-08-25 15:35:22
即使在我的例子中,我也面临着同样的问题,我必须在两个字段上找到文档之间的相似性: 1) description和2) columnValue,其中columnValue在最终得分中给予columnValue比description更多的权重。由于solr只支持string类型的相似性匹配,而不支持double类型,所以我将columnValue字段转换为string类型(即double值现在的类型为string ex: 231.0是"231.0")。模式如下:
enter image description here schema.xml
和我正在使用的查询
description &wt=xml&indent=true&mlt=true&mlt.fl=description,&fq=versionId:1068383519&mlt.count=4000&mlt.mindf=1&mlt.mintf=1 &fl=tableId,分数,tableIndex,分数,versionId,参数,columnId,说明,columnValue,参数,refVersionId &mlt.qf=description^0.4+columnValue^0.6
这里的"id“是refVersionId、VersionId、TableId、TableIndex、ColumnId上的组合键
但问题是columnValue boosting并不有效,即使我从mlt.fl和mlt.qf中删除columnValue,我也没有在响应中发现任何变化,columnValue没有参与相似性匹配。根据我的说法,mlt只在单个字段上工作,即描述。你有任何建议或解决方案来解决这个问题吗?
https://stackoverflow.com/questions/20645600
复制相似问题