题 在弹性搜索中使用GET / POST时的结果不同


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

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

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

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


17
2017-08-30 10:39


起源




答案:


如果你发送一个GET主体可能甚至没有被发送到elasticsearch,所以你基本上没有发送任何查询 _search 端点,这就是你得到所有东西的原因(当然只有基于默认大小参数的前10个结果)。

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

UPDATE
深入研究elasticsearch head插件,当您选择GET方法但在URL本身内并且未指定参数名称时,查询不会作为请求主体发送,如下所示:

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

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

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

http://localhost:9200/_search?source={"query":{"term":{"text":"john"}}}

28
2017-08-30 11:29



httpheader声明我确实在发送查询,但在Lucene查询语法中没有。很奇怪你可以形成一个查询,当它不工作时会显示GET选项.... - Peter
看看我更新的答案。 - javanna
tx更新! - Peter
你在哪里找到“源”键的文档?我没有找到它,它不起作用,downvoting - knocte
@knocte这很棘手。你去 搜索API,然后你点击 请求机构 链接在顶部,你看看页面的底部。 ;) - javanna