假设我有两个字段A和B的文档。
我想使用SOLR的MoreLikeThis,但有一点点:我最感兴趣的是提升A字段就像我的模型文档的B字段的文档。 (也就是说,从模型B字段中提取MLT的“有趣术语”,但只收集基于A字段的MLT结果。)
我没有看到使用mlt.fl字段或mlt.qf提升的方法来在单个查询中实现此效果。 (似乎mlt.fl指定用于发现'有趣术语'和匹配这些术语的字段。)我错过了一些选项吗?
或者我是否必须自己提取“有趣的术语”并交换“字段:术语”的详细信息?
(同样的其他观点也赞赏。)
答案 0 :(得分:1)
我看到的两个选项是:
第一种选择需要花费一些编程(主要是配置更改)和一些内存消耗。第二个涉及更多编程但没有增加内存占用。希望其中一个适合您的需求。
答案 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中查找类似的文档。