在弹性搜索中使用 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 时结果不同的主要内容,如果未能解决你的问题,请参考以下文章

弹性搜索 MoreLikeThis 查询从不返回结果

您以前是不是使用过弹性搜索索引 nutch 抓取结果?

如何在弹性搜索查询中传递特定字段的值列表

在弹性搜索中不过滤的情况下提升匹配术语查询的结果

ASP.Net MVC - GET/POST 具有不同模型时的 ModelState.AddModelError

弹性搜索,多个索引与不同数据集的一个索引和类型?