使用 Sense 工具,我有两个非常简单的查询。除了方法(GET 或 POST)之外,查询是相同的。一次运行一个查询时,我看到的结果虽然非常相似,但在似乎与查询本身无关的方式上有所不同(例如,take, max_score),并且随着我扩大范围而变得不那么相似。
例如,这些返回的结果与我预期的相同:
我的 GET 查询:
GET syslog-*/_search
{
"size": 5,
"query" : {
"bool": {
"must":
{
"term":{"@hostname":"MyServer"}
}
}
}
}
我的 POST 查询:
POST syslog-*/_search
{
"size": 5,
"query" : {
"bool": {
"must":
{
"term":{"@hostname":"MyServer"}
}
}
}
}
当更改为时,"size": 50
它们开始时相同,但大约 1/3 的输出开始漂移;最终到达在 PUT 中存在的时间戳在 GET 结果中无处可寻的地步。当我去类似的东西"size": 5000
时,结果变得如此不同,以至于我开始怀疑从这些查询构建的任何报告数据的准确性。
我才刚刚开始使用 ELK 和 Sense,所以这可能是正常行为。高级开发人员向我保证,在使用 Sense 从 Elasticsearch 数据库中获取信息时,GET 与 PUT 在功能上没有区别,但我可能误解了他。无论如何,我想发布这个问题,看看我是否正确理解了这一点。
发现了另一个似乎可以解决此问题的问题(此处)。但是在阅读详细信息时,这让我更加困惑,因为根据该帖子上接受的答案,POST 实际上是引擎盖下的 GET。
解释与 GET 与 POST http 方法有关。在幕后Sense实际上将GET请求转换为HTTP POST....即使您编写GET,实际的http请求也是POST。