gpt4 book ai didi

elasticsearch - 查询或过滤最小字段值?

转载 作者:行者123 更新时间:2023-12-02 22:17:24 26 4
gpt4 key购买 nike

示例:存储在索引中的文档表示每个测试的测试分数和元数据。

{ "test": 1, "user":1, "score":100, "meta":"other data" },
{ "test": 2, "user":2, "score":65, "meta":"other data" },
{ "test": 3, "user":2, "score":88, "meta":"other data" },
{ "test": 4, "user":1, "score":23, "meta":"other data" }

我需要能够过滤掉除最低测试分数之外的所有内容,并为每个应试者返回与该测试相关的元数据。所以我的预期结果集是:
{ "test": 2, "user":2, "score":65, "meta":"other data" },
{ "test": 4, "user":1, "score":23, "meta":"other data" }

我现在看到的唯一方法是首先通过用户使用嵌套的最小聚合进行术语聚合以获得他们的最低分数。
POST user/tests/_search
{
"aggs" : {
"users" : {
"terms" : {
"field" : "user",
"order" : { "lowest_score" : "asc" }
},
"aggs" : {
"lowest_score" : { "min" : { "field" : "score" } }
}
}
},"size":0
}

然后我必须获取该查询的结果并对每个用户进行过滤查询,并过滤最低分值以获取其余的元数据。哎呀。
POST user/tests/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{"term": { "user": {"value": "1" }}},
{"term": { "score": {"value": "22" }}}
]
}
}
}
}
}

我想知道是否有一种方法可以返回一个响应,该响应对每个应试者的测试分数最低,并且包含原始 _source 文档。

解决方案?

更新 - 已解决

下面给出了每个用户的最低分文档,并按总体最低分排序。并且,它包括原始文档。
GET user/tests/_search?search_type=count
{
"aggs": {
"users": {
"terms": {
"field": "user",
"order" : { "lowest_score" : "asc" }
},
"aggs": {
"lowest_score": { "min": { "field": "score" }},
"lowest_score_top_hits": {
"top_hits": {
"size":1,
"sort": [{"score": {"order": "asc"}}]
}
}
}
}
}
}

最佳答案

也许你可以用热门点击聚合来试试这个:

GET user/tests/_search?search_type=count
{
"aggs": {
"users": {
"terms": {
"field": "user",
"order": {
"_term": "asc"
}
},
"aggs": {
"lowest_score": {
"min": {
"field": "score"
}
},
"agg_top": {
"top_hits": {"size":1}
}
}
}
},
"size": 20
}

关于elasticsearch - 查询或过滤最小字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27413332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com