21

我正在通过 Elastic Search Head 插件尝试弹性搜索。

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

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

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

4

1 回答 1

34

如果您发送 GET,则正文可能甚至不会发送到 elasticsearch,因此您基本上不会向_search端点发送任何查询,这就是为什么您要返回所有内容(当然只有基于默认大小参数的前 10 个结果)。

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

更新
深入研究 elasticsearch head 插件,当您选择 GET 方法时,查询不会作为请求正文发送,而是在 URL 本身中发送,并且没有指定参数的名称,如下所示:

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

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

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

http://localhost:9200/_search?source={"query":{"term":{"text":"john"}}}
于 2012-08-30T11:29:38.560 回答