elasticsearch,Json,elasticsearch" /> elasticsearch,Json,elasticsearch" />

Json 只获取得分最高的文档。弹性搜索

Json 只获取得分最高的文档。弹性搜索,json,elasticsearch,Json,elasticsearch,我是Elasticsearch的新手。实际上我是从今天开始的 我举了一个“银行”的例子,他们已经添加了相同的账户两次 然后我想看看我是否能得到这个号码的账户,结果有三个账户的号码是一样的。没关系 但后来,我写了自己的“分数解释”,并看到它的工作 现在,我只想得到得分最高的文档(帐户),但我不知道怎么做 这就是我写的JSON: { "query": { "function_score": { "query": { "b

我是Elasticsearch的新手。实际上我是从今天开始的

我举了一个“银行”的例子,他们已经添加了相同的账户两次

然后我想看看我是否能得到这个号码的账户,结果有三个账户的号码是一样的。没关系

但后来,我写了自己的“分数解释”,并看到它的工作

现在,我只想得到得分最高的文档(帐户),但我不知道怎么做

这就是我写的JSON:

{
    "query": {
        "function_score": {
            "query": {
                "bool": {
                    "must": [
                        {
                            "match": {
                                "account_number": "998"                                                 }
                        }
                    ]
                }
            },
            "functions": [
                {
                    "script_score": {
                        "script": { 
                            "lang": "groovy",
                            "file": "test-score",                           
                            "params": {
                                "boostBy": 2
                            }                       
                        }
                    }
                }
            ]           
        }
    }
}
这就是结果:

{
    "took": 6,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 3,
        "max_score": 33738,
        "hits": [
            {
                "_index": "bank",
                "_type": "account",
                "_id": "998",
                "_score": 33738,
                "_source": {
                    "account_number": 998,
                    "balance": 16869,
                    "firstname": "Letha",
                    "lastname": "Baker",
                    "age": 40,
                    "gender": "F",
                    "address": "206 Llama Court",
                    "employer": "Dognosis",
                    "email": "lethabaker@dognosis.com",
                    "city": "Dunlo",
                    "state": "WV"
                }
            },
            {
                "_index": "bank",
                "_type": "account",
                "_id": "AVn6HUT-4vooOra1Vb9f",
                "_score": 33246,
                "_source": {
                    "account_number": 998,
                    "balance": 16623,
                    "firstname": "Bradshaw",
                    "lastname": "Mckenzie",
                    "age": 29,
                    "gender": "F",
                    "address": "244 Columbus Place",
                    "employer": "Euron",
                    "email": "bradshawmckenzie@euron.com",
                    "city": "Hobucken",
                    "state": "CO",
                    "aggregations": {
                        "testing_n_grams": {
                            "avg": {
                                "script": {
                                    "inline": "doc['grade'].value",
                                    "lang": "painless"
                                }
                            }
                        }
                    }
                }
            },
            {
                "_index": "bank",
                "_type": "account",
                "_id": "AVn6G6hA4vooOra1Vb9e",
                "_score": 33246,
                "_source": {
                    "account_number": 998,
                    "balance": 16623,
                    "firstname": "Bradshaw",
                    "lastname": "Mckenzie",
                    "age": 29,
                    "gender": "F",
                    "address": "244 Columbus Place",
                    "employer": "Euron",
                    "email": "bradshawmckenzie@euron.com",
                    "city": "Hobucken",
                    "state": "CO",
                    "aggregations": {
                        "testing_n_grams": {
                            "script": {
                                "inline": "doc['firstname'].value",
                                "lang": "painless"
                            }
                        }
                    }
                }
            }
        ]
    }
}
我只想考虑“最高分数”的账目。可能吗?或者我必须把所有的东西都拿走,然后在别的地方决定最高分数是多少

我还想知道,如果有多个帐户有max_分数,它会返回每个帐户的max_分数。这就是为什么我只写“size=1”是不起作用的

抱歉,如果这是一个愚蠢的问题,就像我说的,我今天从Elasticsearch开始,不知道怎么做


也许以前有人试过类似的方法

您可以使用
size
参数限制ES返回的文档数量

{
    "query": {
        [...snip...]
    },
    "size": 1
}

我没有找到一个好答案。所以我使用“size”:1,正如Shadocko在我只需要第一个时建议的那样。当我需要每一个匹配max_分数的数据时,我只需要整个日期,然后在其他地方我决定哪一个数据是正确的

谢谢你的回答!是的,但如果不止一个医生的得分最高?有没有可能把每一份符合最高分数的文件都拿走?