【问题标题】:ElasticSearch boosting score with external systemElasticSearch 使用外部系统提高分数
【发布时间】:2026-01-15 17:10:02
【问题描述】:

我想通过 http/rest 将 ElasticSearch 与外部系统集成,以提高分数。我不是 ElasticSearch 开发人员,对 ElasticSearch 没有太多经验。

我可以使用本机脚本,但性能存在问题。因为对于每个文件,我都需要调用外部系统。我希望看到的是某种批处理。

我不想将来自外部系统的信息存储在 ElasticSearch 中,因为它们可能会随时间改变。

你能告诉我,怎么做吗?

我也没有找到太多关于自定义本机脚本或插件的信息(文档)。只需在 GitHub 上进行项目即可。

【问题讨论】:

  • 如果您正在动态获取数据,您如何建议在不损失性能的情况下链接外部数据?

标签: java elasticsearch elasticsearch-plugin


【解决方案1】:

通常,您会将这些易失性属性索引为 Elasticsearch 文档字段,并构建一个流程来同步来自外部主节点的更改。

如果重新索引文档的成本过高,请考虑在包含静态文档字段的父实体和包含更易变字段的子实体之间创建Parent-Child relationship

这样,对易失性子字段的更新将不需要重新索引更静态的父文档。

【讨论】:

  • 感谢您的回答,但我正在寻找调用外部系统的选项,并且不在 ElasticSearch 中存储来自外部系统的任何数据。
  • 没有好的解决方案。原因是低级别的 Lucene Scorer 需要遍历所有与您的查询匹配的文档(在某些设置中可能是 100,000 或数百万)来计算分数。想象一下在等待查询返回时调用外部数据源 100,000 次可能产生的延迟。这就是为什么评分所需的信息通常会镜像到索引中并与主服务器保持同步。
  • 听起来您首选的工作流程是(1)获取与您的查询匹配的 Elasticsearch 文档 ID 列表,(2)转到外部系统并检索这些文档 ID 的评分属性,( 3) 使用这些评分属性对 Elasticsearch 中的文档进行评分。如果您不想在 Elasticsearch 中存储数据,我认为您会为此做一些自定义后处理(在 Elasticsearch 之外)。