【发布时间】:2012-08-25 01:43:15
【问题描述】:
我正在通过 Elastic Search Head 插件尝试弹性搜索。
当我通过 POST 提交查询时,结果与预期一致。
但是,当我使用 GET 尝试相同的查询时,我总是会取回索引中的所有值。
那么:如何通过 GET 将查询传递给弹性搜索服务器,以便我可以在 URL 中使用搜索字符串?
【问题讨论】:
标签: url post get elasticsearch
我正在通过 Elastic Search Head 插件尝试弹性搜索。
当我通过 POST 提交查询时,结果与预期一致。
但是,当我使用 GET 尝试相同的查询时,我总是会取回索引中的所有值。
那么:如何通过 GET 将查询传递给弹性搜索服务器,以便我可以在 URL 中使用搜索字符串?
【问题讨论】:
标签: url post get elasticsearch
如果您发送一个 GET,那么正文可能甚至不会发送到 elasticsearch,所以您基本上不会向 _search 端点发送任何查询,这就是为什么您要恢复所有内容(当然只有前 10 个结果基于默认大小参数)。
查看URI request,它允许您使用URI 中的q 参数发送基本查询。您可以使用Lucene query syntax 并指定链接页面中列出的其他一些参数。如果您随后想要执行更高级的查询,您可能希望将它们表示为 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"}}}
【讨论】: