弹性搜索查询空列表

use*_*294 5 filter elasticsearch

对于Elasticsearch来说,我是新手.我有一个端点:

http://localhost:8000/v1/scholarship
Run Code Online (Sandbox Code Playgroud)

这将返回数据库中的所有奖学金.我可以添加一个过滤器:

http://localhost:8000/v1/scholarship?institution=Michigan State
Run Code Online (Sandbox Code Playgroud)

这将返回与特定机构相关的所有奖学金(在这种情况下,密歇根州)

我的奖学金模型有一个机构领域,如果没有任何机构隶属关系,则默认为空列表:

"institution" : [],
Run Code Online (Sandbox Code Playgroud)

我如何过滤所有没有机构的奖学金?

我尝试了这个查询,但所有奖学金都被退回(因为没有匹配)

http://localhost:8000/v1/scholarship?intitution=[]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我在考虑创建一个新的终点,但这似乎打败了使用过滤器/ Elasticsearch的目的

小智 9

您可以使用Exists查询来查找空字段:

GET localhost:8000/v1/scholarship/_search
{
    "query": {
        "bool": {
            "must_not": {
                "exists": {
                    "field": "scholarship"
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这与以下字段匹配:

{ "scholarship": null }
{ "scholarship": [] } 
{ "scholarship": [null] }
Run Code Online (Sandbox Code Playgroud)