首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr MoreLikeThis boosting查询字段

Solr MoreLikeThis boosting查询字段
EN

Stack Overflow用户
提问于 2013-12-18 06:00:19
回答 2查看 3.1K关注 0票数 7

我正在试验Solr的MoreLikeThis特性。

我的模式处理文章,我在三个字段中寻找文章之间的相似性:文章标题、文章文本和主题。

以下查询运行良好:

代码语言:javascript
复制
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属性来实现这一点,并进行一些改进。

我对这样的查询的尝试如下:

代码语言:javascript
复制
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的任何示例,这让我认为我搞错了。

有没有人能做到这样的事情?

EN

回答 2

Stack Overflow用户

发布于 2014-09-01 02:28:02

如果您有简单的推荐需求,其中只有一个字段要匹配,或者有几个同等重要的字段,则MLT组件非常有用。但是,任何时候你想改变不同字段的相对重要性,或者需要做一些更具体的事情,比如包括反向距离提升,那么你可能会想要编写自己的伪MLT处理程序。MLT处理程序所做的全部工作就是根据源文档中指定的字段的tf.idf分数生成顶级术语。您可以很容易地在生成自定义SOLR OR查询的一些代码中模拟该功能。您将失去术语向量的优势,但只要您的查询大小合理(例如< 20个术语),它可能会表现得相当好。我们有一个很小的索引,所以生成我们自己的包含数百个术语的MLT查询,并且它在可接受的时间内(几毫秒)执行。但是,我已经看到这种行为在包含少量1亿个文档和较大字段的大型索引上有所恶化,在这种情况下,您需要将查询限制为少量的热门术语。使用您自己的代码代替MLT是一项更多的工作,但您可以获得更多的灵活性。

票数 3
EN

Stack Overflow用户

发布于 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只在单个字段上工作,即描述。你有任何建议或解决方案来解决这个问题吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20645600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档