我是新手elasticsearch,這是我的第一個 NoSql DB,但我遇到了一些問題。
我有這樣的事情:
index_logs: [
{
"entity_id": id_1,
"field_name": "name",
"old_value": null
"new_value": "some_name"
"number": 1
},
{
"entity_id": id_1,
"field_name": "description",
"old_value": null
"new_value": "some_descr"
"number": 1
},
{
"entity_id": id_1,
"field_name": "description",
"old_value": "some_descr"
"new_value": null
"number": 2
},
{
"entity_id": id_2,
"field_name": "enabled",
"old_value": true
"new_value":false
"number": 25
},
]
我需要找到所有entity_id我不知道的具有指定和 max_number 的檔案。
其中postgres將如下代碼:
SELECT *
FROM logs AS x
WHERE x.entity_id = <some_entity_id>
AND x.number = (SELECT MAX(y.number) FROM logs AS y WHERE y.entity_id = x.entity_id)
我怎樣才能在彈性搜索中做到這一點?
uj5u.com熱心網友回復:
使用以下查詢:
{
"query": {
"term": {
"entity_id": {
"value": "1"
}
}
},
"aggs": {
"max_number": {
"terms": {
"field": "number",
"size": 1,
"order": {
"_key": "desc"
}
},
"aggs": {
"top_hits": {
"top_hits": {
"size": 10
}
}
}
}
}
}
聚合將按“數字”分組,按數字的降序排序,然后在“top_hits”子聚合內為您提供具有該數字的前 10 個結果。
獲取“所有”檔案的另一種方法是簡單地使用相同的查詢,沒有任何聚合,并按“數字”欄位降序排序。在客戶端,您使用“search_after”進行分頁,并對所有結果進行分頁,直到“數字”欄位發生變化。數字第一次更改時,您退出分頁回圈,您將擁有具有給定物體 ID 和最大數字的所有記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/498373.html
