猿问

Elasticsearch.net - 范围查询

我正在尝试通过Elasticsearch.net(不是 NEST)从 C# 查询 Elasticsearch 索引。具体来说,我需要获取自特定日期以来创建的所有具有“成功”状态的文档。为了做到这一点,我有:


var query = new {

  query = new {

    match = new {

      field="status",

      query="success"

    }

  },


  range = new {

    ?

  }

};

我不确定该range部分使用什么。事实上,我什至不确定我的语法query是否正确。我真的不明白 C# 语法如何映射到 Elasticsearch 中的查询 DSL。任何帮助表示赞赏。


红颜莎娜
浏览 204回答 3
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"        }      }    }  }};

缥缈止盈

我真的不明白 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”,从属性名称中删除引号,基本上就是这样。

守着一只汪

查询将类似于: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"        }      }    }  }};
随时随地看视频慕课网APP
我要回答