我在 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”。
尝试了聚合,但它没有给我预期的结果。
简单地看一下collapse API。
您只需根据
ISIN
折叠结果,并根据您的需要使用排序部分对 Exch
或 desc
进行优先排序。 (这里 asc
大于 NSE
,所以 BSE
应该适合你)