我正在尝试通过Elasticsearch.net(不是NEST)从C#查询Elasticsearch索引。具体来说,我需要获取自特定日期以来创建的所有状态为“成功”的文档。为了做到这一点,我有:
var query = new {
query = new {
match = new {
field="status",
query="success"
}
},
range = new {
?
}
};
我不确定range
部分使用什么。实际上,我什至不确定query
的语法是否正确。我真的不了解C#语法如何映射到Elasticsearch中的查询DSL。任何帮助表示赞赏。
谢谢!
答案 0 :(得分: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"
}
}
}
}
};
答案 1 :(得分:1)
我不太了解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”,从属性名称中删除引号,基本上就是这样。
答案 2 :(得分:0)
查询如下:
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"
}
}
}
}
};