为了账号安全,请及时绑定邮箱和手机立即绑定

你如何过滤非空值elasticsearch?

你如何过滤非空值elasticsearch?

斯蒂芬大帝 2023-03-16 09:09:36
我正在尝试过滤掉不为 null 的值:以sql为例SELECT ALL FROM Mytable WHERE field_1 NOT NULL and field_2 ="alpha"我应该如何在 elasticsearch-dsl(python) 中编写此查询?我试过这样的事情:s = Mytable.search().query(Q('match', field_2 ='alpha')).filter(~Q('missing', field='field_1'))但它返回具有 field_1 空值的元素另外,我试过这个,但没有用field_name_1 = 'field_2'value_1 = "alpha"field_name_2 = 'field_1'value_2 = " "filter = {     "query": {        "bool": {        "must": [            {            "match": {                field_name_1 : value_1            }            },            {            "bool": {                "should": [                    {                    "bool": {                        "must_not": [                            {                                field_name_2: {                                    "textContent": "*"                                }                            }                        ]                    } }                ]            }            }        ]        }    }    }  
查看完整描述

3 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

我不熟悉 elasticsearch-dsl(python),但以下搜索查询将为您提供所需的相同搜索结果:


SELECT ALL FROM Mytable WHERE field_1 NOT NULL and field_2 ="alpha"

在以下搜索查询的帮助下,搜索结果将是name="alpha"ANDcost字段not be null。您可以参考存在的查询以了解更多信息。


指数数据:


 {  "name": "alpha","item": null }

 {  "name": "beta","item": null  }

 {  "name": "alpha","item": 1    }

 {  "name": "alpha","item": []   }

搜索查询:


您可以将 bool 查询与 exists 查询结合起来,如下所示:


    {

  "query": {

    "bool": {

      "must": [

        {

          "term": {

            "name": "alpha"

          }

        },

        {

          "exists": {

            "field": "item"

          }

        }

      ]

    }

  }

}

搜索结果:


"hits": [

  {

    "_index": "my-index",

    "_type": "_doc",

    "_id": "4",

    "_score": 1.6931472,

    "_source": {

      "name": "alpha",

      "item": 1

    }

  }

]


查看完整回答
反对 回复 2023-03-16
?
忽然笑

TA贡献1806条经验 获得超5个赞

你可以试试这个:

s = Mytable.search()
.query(Q('bool', must=[Q('match', field_2='alpha'), Q('exists', field='field_1')]))

这是使用布尔复合查询的方式


查看完整回答
反对 回复 2023-03-16
?
DIEA

TA贡献1820条经验 获得超3个赞

                query: {

                      bool: {

                        must: [

                          {

                            bool: {

                              must_not: {

                                missing: {

                                  field: 'follower',

                                  existence: true,

                                  null_value: true,

                                },

                              },

                            },

                          },

                          {

                            nested: {

                              path: 'follower',

                              query: {

                                match: {

                                  'follower.id': req.currentUser?.id,

                                },

                              },

                            },

                          },

                        ],

                      },

                    },


查看完整回答
反对 回复 2023-03-16
  • 3 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号