2012-08-30 81 views
16

我正在通過彈性搜索頭插件試驗彈性搜索。在彈性搜索中使用GET/POST時的不同結果

結果與我通過POST提交查詢時的預期結果一致。

但是,當我使用GET嘗試相同的查詢時,我總是返回索引中的所有值。

因此:如何通過GET將查詢傳遞給彈性搜索服務器,以便我可以在URL中使用搜索字符串?

回答

27

如果發送一個GET,那麼body可能不會被髮送到elasticsearch,所以您基本上沒有向_search端點發送任何查詢,這就是爲什麼您會收回所有東西(當然只有前10個結果基於默認大小參數)。

查看URI request,它允許您使用URI中的q參數發送基本查詢。您可以使用Lucene query syntax並指定鏈接頁面中列出的其他參數。如果您希望執行更高級的查詢,則可能需要將它們表示爲JSON查詢,以便獲得elasticsearch Query DSL的所有優點,但是您需要將它們作爲請求的主體提供。

UPDATE
在elasticsearch頭插件尋找更深層次的,當您選擇GET方法查詢不被髮送的請求主體,但URL本身並沒有爲參數指定名稱,如:

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

這可能是插件本身的一個錯誤,elasticsearch找不到查詢,這就是爲什麼你會得到所有結果。這意味着只有POST方法在使用elasticsearch頭髮送查詢時才起作用。

Elasticsearch允許使用GET和POST來執行查詢。如果你使用GET您可以將查詢作爲身體或使用source參數是這樣的:在Lucene的查詢語法

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

說我確實將查詢發送的狀態的HTTPHeader,但不是。只是奇怪,你可以形成一個查詢,並提供GET選項,當它不工作.... – Peter

+0

看看我更新的答案。 – javanna

+0

tx的更新! – Peter

相關問題