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

Elasticsearch.net - 范围查询

Elasticsearch.net - 范围查询

C#
红颜莎娜 2022-06-19 16:46:19
我正在尝试通过Elasticsearch.net(不是 NEST)从 C# 查询 Elasticsearch 索引。具体来说,我需要获取自特定日期以来创建的所有具有“成功”状态的文档。为了做到这一点,我有:var query = new {  query = new {    match = new {      field="status",      query="success"    }  },  range = new {    ?  }};我不确定该range部分使用什么。事实上,我什至不确定我的语法query是否正确。我真的不明白 C# 语法如何映射到 Elasticsearch 中的查询 DSL。任何帮助表示赞赏。
查看完整描述

3 回答

?
万千封印

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

这样的事情应该做:


var query = new {

  bool = new {

    must = new {

      match = new {

        field = "status",

        query = "success"

      }

    },

    filter = new {

      range = new {

        createDate = new {

          gt = "2018-12-01T00:00:00.000Z"

        }

      }

    }

  }

};


查看完整回答
反对 回复 2022-06-19
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

我真的不明白 C# 语法如何映射到 Elasticsearch 中的查询 DSL。


通过查看提供的示例,我假设您想使用PosData.Serializable(query). 在这种情况下,查询对象(无论它是什么类型)将被 JSON 序列化并发布到 elasticsearch 集群,无需任何修改。当您使用new {}C# 语法创建对象时,默认情况下将其序列化为 JSON,并使用与该对象的属性相同的键。也就是说,对象


new {

    query = new {

        bool = new {

            must = new {

                term = new {

                    status = "success"

                }

            },

            filter = new {

                range = new {

                    date = new { gte = "2018-12-22T00:00:00.000Z" }

                }

            }

        }

    }

}

将被序列化并传递给elasticsearch


"query": {

    "bool": {

        "must": {

            "term": {

                  "status": "success"

            }

        },

        "filter": {

            "range": {

               "date": { "gte": "2018-12-22T00:00:00.000Z" }

            }

        }

    }

}

因此,通过使用低级 Elasticsearch 客户端,您可以创建几乎 1:1 映射到查询 DSL 语法的对象。您可以从 elastic.co 复制示例,将“:”替换为“= new”,从属性名称中删除引号,基本上就是这样。


查看完整回答
反对 回复 2022-06-19
?
守着一只汪

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

查询将类似于:


var query = new {

  bool = new {

    must = new {

      match = new {

        field = "status",

        query = "success"

      }

    },

    filter = new {

      range = new {

        createDate = new {

          gte = "2018-01-01T00:00:00.000Z",

          lt = "2019-01-01T00:00:00.000Z"

        }

      }

    }

  }

};


查看完整回答
反对 回复 2022-06-19
  • 3 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信