SOLR MoreLike是否可以使用不同的字段进行模型和匹配?

时间:2010-10-22 06:27:21

标签: solr lucene morelikethis

假设我有两个字段A和B的文档。

我想使用SOLR的MoreLikeThis,但有一点点:我最感兴趣的是提升A字段就像我的模型文档的B字段的文档。 (也就是说,从模型B字段中提取MLT的“有趣术语”,但只收集基于A字段的MLT结果。)

我没有看到使用mlt.fl字段或mlt.qf提升的方法来在单个查询中实现此效果。 (似乎mlt.fl指定用于发现'有趣术语'和匹配这些术语的字段。)我错过了一些选项吗?

或者我是否必须自己提取“有趣的术语”并交换“字段:术语”的详细信息?

(同样的其他观点也赞赏。)

2 个答案:

答案 0 :(得分:1)

我看到的两个选项是:

  1. 使用copyField - 使用名为B的字段A的副本索引原始文档,然后使用B进行查询。
  2. 扩展MoreLikeThisHandler并更改您查询的字段。
  3. 第一种选择需要花费一些编程(主要是配置更改)和一些内存消耗。第二个涉及更多编程但没有增加内存占用。希望其中一个适合您的需求。

答案 1 :(得分:0)

我现在认为有两种方法可以达到预期的效果(无需自定义MLT源代码)。

第一个选项:使用MLT handler执行初始MLT查询,添加参数&mlt.interestingTerms=details。这包括被认为有趣的术语列表,以及相对提升的排名。通常的行为是针对相同的mlt.fl字段使用这些发现的术语来查找类似的文档。例如,响应将包括:

"interestingTerms": 
    ["field_b:foo",5.0,"field_b:bar",2.9085307,"field_b:baz",1.67070794]

(因为这个初始查询唯一有趣的是有趣的问题,投入一个排除所有文档的fq可以帮助它跳过不必要的评分工作。)

明确地将有趣的条款信息重新组合成新的OR查询field_a:foo^5.0 field_a:bar^2.9085307 field_a:baz^1.67070794相当于使用B字段示例文本来查找字段A中相似的文档,并且可能正好模仿查询默认的MLT类型在其通常的模型领域。

第二个选项:抓取模型文档的实际字段B文本,并将其直接作为ContentStream body提供,以代替查询,用于指定模型文档。然后在场A处靶向mlt.fl以便收集类似的结果。例如,参数的片段可能是…&stream.body=foo bar baz&mlt.fl=field_a&…。同样,最初来自field_b的模型文本的净效果是仅在field_a中查找类似的文档。