如何在ElasticSearch中仅对数组的一个子集计算得分

时间:2018-09-20 17:27:35

标签: elasticsearch elasticsearch-plugin elasticsearch-painless aws-elasticsearch

我在ElasticSearch中有一个用于索引描述字符串数组的字段。有没有一种方法可以生成仅考虑这些字符串之一的乐谱?

例如,我有以下文档:

  1. ["Red car", "Ford Fusion 2018", "Leather Seats"]
  2. ["Red car"]
  3. ["Big red car"]

当前,当我搜索“ red car”时,文档2的得分将明显高于文档1,因为文档1包含许多无关的单词,并且ElasticSearch假定该字段位于同一文本正文中。 / p>

有没有一种方法可以使用script_score或脚本相似性来实现?使用位置间隙,我可以在分数计算期间以某种方式拆分数组,但是似乎无痛的API可以在评分过程中访问单词位置。

其他注意事项:

  • 我尝试修改BM25的参数以忽略字段长度,但是问题是文档3也将具有与文档1和2相同的分数。理想情况下,我希望文档2和文档1具有相同的分数得分最低的文档3。这种方式将字段长度用于单个数组项目而不是整个字段的分数计算中。

  • 嵌套文档也不是一个好选择,因为它会使应用程序的其他部分不必要地变得复杂。

  • 自定义插件。我使用的是AWS ElasticSearch,它不支持自定义插件,因此编写自定义相似插件将无法工作。

还有其他选择吗?

0 个答案:

没有答案