【问题标题】:Different result when using GET/POST in elastic search在弹性搜索中使用 GET/POST 时结果不同
【发布时间】:2012-08-25 01:43:15
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: url post get elasticsearch


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2014-02-21
    相关资源
    最近更新 更多