Solr MoreLikeThis 提升查询字段

标签 solr lucene solrnet recommendation-engine 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

但我想尝试提升不同的查询字段 - 例如,在文章标题中更加重视相似性。

文档 ( 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 的示例,这让我相信我有问题。

有没有人设法实现这样的目标?

最佳答案

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

关于Solr MoreLikeThis 提升查询字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20645600/

相关文章:

lucene - 如何配置 solr/lucene 来执行编辑距离搜索?

solr - QueryResponse (SolrJ 5.0.0) 将 ClassCastException 从 String 返回到 NamedList for spellcheck.collat​​ion=true

java - Lucene 3.5.0 QueryParser 在以编程方式生成的查询中找不到任何结果

solrnet - 有没有办法使用 Solr Net 获取 solr 分组的结果

使用LIKE子句进行Solr查询

java - 应用日语 fileType 时出现 ClassNotFoundException

Solr 6 - 字段的 SUM 值以及 GROUP BY

search - Lucene QueryParser 忽略搜索词 "BE"

java - 在哪里可以找到有关使用 Lucene 和 Compass 的有用信息?

Solr 单索引 vs Solr 多核