在弹性搜索中使用 GET/POST 时结果不同
Posted
技术标签:
【中文标题】在弹性搜索中使用 GET/POST 时结果不同【英文标题】:Different result when using GET/POST in elastic search 【发布时间】:2012-08-25 01:43:15 【问题描述】:我正在通过 Elastic Search Head 插件尝试弹性搜索。
当我通过 POST 提交查询时,结果与预期一致。
但是,当我使用 GET 尝试相同的查询时,我总是会取回索引中的所有值。
那么:如何通过 GET 将查询传递给弹性搜索服务器,以便我可以在 URL 中使用搜索字符串?
【问题讨论】:
【参考方案1】:如果您发送一个 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"
【讨论】:
httpheader 声明我确实在发送查询,但不是在 Lucene 查询语法中。奇怪的是,当它不起作用时,您可以形成一个查询并显示 GET 选项.... 您在文档中哪里可以找到“源”键?我没有找到它,它不起作用,downvoting @knocte 这很棘手。您转到Search API,然后单击顶部的request body 链接,然后查看页面底部。 ;) 你是救生员。 get 还需要参数 source_content_type=application/json以上是关于在弹性搜索中使用 GET/POST 时结果不同的主要内容,如果未能解决你的问题,请参考以下文章