如何通过 ElasticSearch 的引用获得加权的结果

Jes*_*und 5 elasticsearch

我有一个由引用其他注释的注释组成的数据集。

{id:"aaa", note: "lorem ipsum", references: ["ccc"]},
{id:"bbb", note: "lorem ipsum", references: ["aaa","ccc"]},
{id:"ccc", note: "lorem ipsum", references: ["bbb"]},
Run Code Online (Sandbox Code Playgroud)

我希望弹性搜索使用引用来加权结果,因此在这种情况下,如果我搜索,lorem我应该返回 id "ccc",因为它具有最多的引用。根据他们的文档,他们的图形解决方案正是这样做的,但我也看到了他们做类似事情的例子。

但是没有解释这是如何映射到索引的。所以我的问题是:如何设置使用引用(索引)的 ES 索引?

Jes*_*und 4

其他答案给出了一些线索,但随后@7379490在另一个频道中提供了答案:

没有办法直接在 ES 中执行此操作。有两种可能的解决方案:预先计算引用并通过将新值映射到文档将它们传递到 ES 中。

或者聚合并使用聚合对响应进行排序:

{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "note": "lorem"
        }
      },
      "aggs": {
      "references":{
        "terms" : {
          "field" : "references.keyword",
          "order": { "_count": "desc" }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)