有没有可能让SOLR更像使用不同字段进行模型和匹配?
假设我有两个字段的文档,A和B 我想使用SOLR的更类似于此,但有一个转折点:我最感兴趣的是增强a字段类似于模型文档B字段的文档。(也就是说,从model B字段中提取MLT的“有趣术语”,但仅收集基于A字段的MLT结果。) 我看不到在单个查询中使用mlt.fl字段或mlt.qf提升来实现这种效果的方法。(mlt.fl似乎指定了用于发现“有趣术语”和匹配这些术语的字段。)我是否缺少一些选项 还是我必须自己提取“有趣的术语”并交换“字段:术语”的详细信息 (同样道理的其他想法也值得赞赏。)我看到的两个选择是:有没有可能让SOLR更像使用不同字段进行模型和匹配?,solr,lucene,morelikethis,Solr,Lucene,Morelikethis,假设我有两个字段的文档,A和B 我想使用SOLR的更类似于此,但有一个转折点:我最感兴趣的是增强a字段类似于模型文档B字段的文档。(也就是说,从model B字段中提取MLT的“有趣术语”,但仅收集基于A字段的MLT结果。) 我看不到在单个查询中使用mlt.fl字段或mlt.qf提升来实现这种效果的方法。(mlt.fl似乎指定了用于发现“有趣术语”和匹配这些术语的字段。)我是否缺少一些选项 还是我必须自己提取“有趣的术语”并交换“字段:术语”的详细信息 (同样道理的其他想法也值得赞赏。)我看到的
第一个选项需要一些编程(主要是配置更改)和一些内存消耗。第二种方法需要更多的编程,但不会增加内存占用。希望其中一个适合您的需要。我现在认为有两种方法可以达到预期的效果(无需定制MLT源代码) 第一个选项:使用进行初始MLT查询,添加参数
&MLT.interestingTerms=details
。这包括被认为有趣的术语列表,并根据它们的相对优势进行排名。通常的行为是在相同的mlt.fl字段中使用发现的术语来查找类似的文档。例如,响应将包括以下内容:
"interestingTerms":
["field_b:foo",5.0,"field_b:bar",2.9085307,"field_b:baz",1.67070794]
(由于这个初始查询唯一有趣的是有趣的术语,因此加入一个排除所有文档的fq
,可以帮助它跳过不必要的评分工作。)
显式地将感兴趣的术语信息重新组合到一个新的或查询字段\u a:foo^5.0字段\u a:bar^2.9085307字段\u a:baz^1.67070794
相当于使用B字段示例文本来查找字段a中类似的文档,并且可能完全模仿默认MLT在其常用模型字段上的查询类型
第二个选项:获取模型文档的实际字段B文本,并将其直接作为a输入,以代替用于指定模型文档的查询。然后将mlt.fl对准字段A,以便收集类似的结果。例如,参数片段可能是
…&stream.body=foo-bar-baz&mlt.fl=field\u a&…
。同样,最终的结果是,最初来自字段_b的模型文本只在字段_a中找到了相似的文档 我现在认为有两种方法可以达到预期的效果(无需定制MLT源代码)
第一个选项:使用进行初始MLT查询,添加参数&MLT.interestingTerms=details
。这包括被认为有趣的术语列表,并根据它们的相对优势进行排名。通常的行为是在相同的mlt.fl字段中使用发现的术语来查找类似的文档。例如,响应将包括以下内容:
"interestingTerms":
["field_b:foo",5.0,"field_b:bar",2.9085307,"field_b:baz",1.67070794]
(由于这个初始查询唯一有趣的是有趣的术语,因此加入一个排除所有文档的fq
,可以帮助它跳过不必要的评分工作。)
显式地将感兴趣的术语信息重新组合到一个新的或查询字段\u a:foo^5.0字段\u a:bar^2.9085307字段\u a:baz^1.67070794
相当于使用B字段示例文本来查找字段a中类似的文档,并且可能完全模仿默认MLT在其常用模型字段上的查询类型
第二个选项:获取模型文档的实际字段B文本,并将其直接作为a输入,以代替用于指定模型文档的查询。然后将mlt.fl对准字段A,以便收集类似的结果。例如,参数片段可能是…&stream.body=foo-bar-baz&mlt.fl=field\u a&…
。同样,最终的结果是,最初来自字段_b的模型文本只在字段_a中找到了相似的文档 不确定(1)制作字段的额外副本有何帮助:字段已经存在。我只需要从其中一个提取有趣的术语,然后与另一个进行比较。是(2)将是最终的退路。。。虽然我认为不需要修改代码就可以达到预期的效果,只需要一系列正确的查询。有关详细信息,请参阅以下自我回答。不确定(1)制作字段的额外副本有何帮助:字段已经存在。我只需要从其中一个提取有趣的术语,然后与另一个进行比较。是(2)将是最终的退路。。。虽然我认为不需要修改代码就可以达到预期的效果,只需要一系列正确的查询。有关详细信息,请参阅以下自我回答。