Elasticsearch-根据字段值过滤出唯一文档并根据另一个字段值确定优先级

问题描述 投票:0回答:1

我在 Elasticsearch 中有一个股票数据集,其中可能存在一只股票可以在多个交易所上市的情况。识别独特库存的关键是 ISIN。 因此,我的 ISIN 很少,可以出现在 2 个文档中,一份包含 Exch:“NSE”,一份包含 Exch:“BSE”。 如何过滤掉我的查询结果集,以便在存在相同 ISIN 的多个记录的情况下,Exch: "NSE" 得到优先排序,并且 Exch: "BSE" 不会出现在结果中。

{
  "hits": {
    "total": {
      "value": 6329,
      "relation": "eq"
    },
    "max_score": null,
    "hits": [
      {
        "_index": "stkindex",
        "_id": "2277NSEE",
        "_score": null,
        "_source": {
          "Exch": "NSE",
          "Sym": "MRF",
          "Isin": "INE883A01011"
        }
      },
      {
        "_index": "stkindex",
        "_id": "500290BSEE",
        "_score": null,
        "_source": {
          "Exch": "BSE",
          "Isin": "INE883A01011",
          "Sym": "MRF"
        }
      },
      {
        "_index": "stkindex",
        "_id": "517174BSEE",
        "_score": null,
        "_source": {
          "Exch": "BSE",
          "Isin": "INE671A01010",
          "Sym": "HONAUT"
        }
      }
    ]
  }
}

如果你看到上面的查询结果,你可以看到股票MRF出现了2次,一次是Exch NSE,一次是BSE。我在这里想要的是 MRF 应该只出现一次,其中 Exch 为“NSE”。

尝试了聚合,但它没有给我预期的结果。

elasticsearch elastic-stack
1个回答
0
投票

折叠API

简单地看一下collapse API

您只需根据

ISIN
折叠结果,并根据您的需要使用排序部分对
Exch
desc
进行优先排序。 (这里
asc
大于
NSE
,所以
BSE
应该适合你)
    

© www.soinside.com 2019 - 2024. All rights reserved.