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

我想使用Solr的Morelikethis,但有一个扭曲:我最感兴趣的是促进像我的模型文档的B字段一样的A字段。 (也就是说,从模型B字段中提取MLT的“有趣术语”,但仅根据A字段收集MLT结果。)

我看不到使用MLT.FL字段或MLT.QF提升来实现此效果的方法。 (MLT.FL似乎指定了用于发现“有趣的术语”和与这些术语匹配的字段。)我是否缺少某个选项?

还是我自己提取“有趣的术语”并交换“字段:术语”细节?

(同样的其他想法也受到赞赏。)

有帮助吗?

解决方案 2

我现在认为有两种方法可以实现所需的效果(不自定义MLT源代码)。

第一个选项:使用 MLT处理程序, ,添加参数 &mlt.interestingTerms=details. 。这包括被认为有趣的术语列表,并以其相对的增强排名。通常的行为使用相同的MLT.FL字段发现的术语来查找相似的文档。例如,响应将包括以下内容:

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

(由于这个初始查询的唯一一件事是有趣的,这是有趣的 fq 排除所有文档可以帮助它跳过不必要的得分工作。)

明确将fromptterms信息重新组合到新的或查询中 field_a:foo^5.0 field_a:bar^2.9085307 field_a:baz^1.67070794 相当于使用B字段示例文本查找字段A中相似的文档,并且可能正好模仿了MLT在其常规模型字段上所做的那种查询默认的类型。

第二个选项:获取模型文档的实际字段B文本,并将其直接作为A进行。 contentsstream主体, ,用于代替查询,以指定模型文档。然后是为了收集相似的结果,在场上靶向MLT.FL。例如,参数的片段可能是 …&stream.body=foo bar baz&mlt.fl=field_a&…. 。同样,最初来自field_b的模型文本的网络效果仅在field_a中找到类似的文档。

其他提示

我看到的两个选项是:

  1. 使用CopyField-索引您的原始文档,并使用字段A的副本A命名B,然后使用B查询B。
  2. 扩展Morelikethishandler并更改您查询的字段。

第一个选项要花费一些编程(主要是配置更改)和一些内存消耗。第二个涉及更多编程,但没有内存足迹增加。希望其中一个适合您的需求。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top