2013-12-17 53 views
4

我与Solr的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 

但我想与推动不同查询字段进行试验 - 即把更多的重量上相似的articletitle,例如。

的文档(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的文档中的任何示例,这导致我相信我有什么问题。

有没有人成功地实现这样的事情?如果你有,你只有一个字段以匹配上,或几个具有同等的重要性简单的建议要求

+0

我刚刚开始遇到这个问题。您可以将mlt.interestingTerms = details参数放在那里,以便根据原始文档查看它所选择的术语,而且无论我放入mlt.fl参数中的什么内容(或I字段忽略)。 – Simon

回答

1

的MLT成分是有用的。但是任何时候你想改变不同领域的相对重要性,或者需要做一些更具体的事情,比如包含反距离提升,那么你可能会想要编写自己的伪MLT处理程序。所有MLT处理程序都会根据来自源文档的tf.idf分数指定的字段生成顶级条款。您可以在生成自定义SOLR OR查询的某些代码中轻松模拟该功能。你将失去优势termvectors的,但只要你查询合理大小(比如< 20项),它可能会执行得很好。我们有一个小的索引,因此可以用几百个术语生成我们自己的MLT查询,并在可接受的时间内(几ms)执行。不过,我已经看到这种行为在大量索引上有几个1亿个文档和更大的字段时会恶化,在这种情况下,您需要将查询限制为少数几个主要条款。使用自己的代码代替MLT是更多的工作,但您获得更多的灵活性。

1

即使我面临着同样的问题,在我的情况下,我必须找到两个字段上使用更多像这样的文档之间的相似性1)description和2)columnValue where columnValue where columnValue赋予比最终分数中的描述更多的权重。由于solr的只支持字符串类型相似性匹配,并且它不列入类型双支撑,因此,我已转换的columnValue字段串类型(即现在的双值是字符串类型恩:现在231.0为“231.0”)。 这里是模式:

enter image description here 模式。XML

并且我使用

http://hostname:8983/solr/collection3/mlt?q= &重量= XML &缩进查询=真& MLT =真& mlt.fl =描述,columnValue & FQ = VERSIONID:1068383519 & MLT。 count = 4000 & mlt.mindf = 1 & mlt.mintf = 1 & fl = tableId,tableIndex,score,versionId,columnId,description,columnValue, refVersionId & mlt.qf =说明^ 0.4 + columnValue^0.6

这里 “ID” 是refVersionId,VERSIONID,TABLEID,TableIndex复合键,ColumnID的

,但问题是,columnValue提高是不是有效,我即使我从mlt.fl和mlt.qf中删除columnValue,columnValue没有参与相似性匹配,也不会在响应中找到任何更改。据我所知,mlt只在单一领域工作,即描述。你有任何建议或任何解决方案来解决这个问题。