Elasticsearch.net-范围查询



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

var query = new {
query = new {
match = new {
field="status",
query="success"
}
},
range = new {
?
}
};

我不确定range部分使用什么。事实上,我甚至不确定query的语法是否正确。我真的不明白C#语法是如何映射到Elasticsearch中的QueryDSL的。感谢您的帮助。

谢谢!

应该这样做:

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中的Query 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" }
}
}
}
}
}

将被序列化并作为传递给弹性搜索

"query": {
"bool": {
"must": {
"term": {
"status": "success"
}
},
"filter": {
"range": {
"date": { "gte": "2018-12-22T00:00:00.000Z" }
}
}
}
}

因此,通过使用低级别的Elasticsearch客户端,您可以创建几乎1:1映射到QueryDSL语法的对象。您可以从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"
}
}
}
}
};

最新更新