在弹性搜索中使用GET / POST时的结果不同

时间:2012-08-30 10:39:57

标签: url post get elasticsearch

我正在尝试通过弹性搜索头插件进行弹性搜索。

当我通过POST提交查询时,结果与预期一致。

但是,当我使用GET尝试相同的查询时,我总是返回索引中的所有值。

那么:如何通过GET将查询传递给弹性搜索服务器,以便我可以在URL中使用搜索字符串?

1 个答案:

答案 0 :(得分:28)

如果你发送一个GET,身体可能甚至没有被发送到elasticsearch,所以你基本上没有向_search端点发送任何查询,这就是为什么你得到了所有东西(当然只有前10个结果)基于默认大小参数)。

查看URI request,它允许您使用URI中的q参数发送基本查询。您可以使用Lucene query syntax并指定链接页面中列出的其他一些参数。如果您想要执行更高级的查询,您可能希望将它们表达为JSON查询,以便获得elasticsearch Query DSL的所有好处,但您需要将它们作为请求的主体提供。 / p>

<强>更新
深入研究elasticsearch head插件,当您选择GET方法但在URL本身内并且未指定参数名称时,查询不会作为请求主体发送,如下所示:

http://localhost:9200/_search&{"query":{"term":{"text":"john"}}}

这可能是插件本身的一个错误,而elasticsearch无法找到查询,这就是为什么你得到所有结果的原因。这意味着只有POST方法在使用elasticsearch head发送查询时才有效。

Elasticsearch允许使用GET和POST来执行查询。如果您使用GET,您可以将查询作为正文发送或使用source参数,如下所示:

http://localhost:9200/_search?source={"query":{"term":{"text":"john"}}}
相关问题