2017-09-12 92 views
2

是否可以在從elasticsearch獲得的結果中搜索?從elasticsearch搜索到的結果中搜索

爲了達到這個目前我需要運行&等待上elasticsearch兩個搜索:第一搜索

{ "match": { "title": "foo" } } 

它需要5秒,返回500個文檔等。然後進行第二次搜索

{ 
    "bool": { 
    "must": [ 
     { "match": { "title": "foo" } }, 
     { "match": { "title": "bar" } } 
    ] 
    } 
} 

它需要5秒鐘,並返回200個文檔,這基本上與從elasticsearch的角度來看第一次搜索無關。

而不是這樣做,我想提供一個「在結果內進一步搜索」選項給我的用戶。希望通過此選項,用戶可以使用基於第一次搜索返回的結果提供的更多關鍵字進行搜索。

所以我的情景是,用戶首先搜索關鍵字「foo」,並在網頁上獲得500個結果,然後選擇「在結果內進一步搜索」,在500個結果中進行第二次搜索,並希望能夠真正快速地獲得一些精緻的結果。

我該如何存檔它?謝謝!

回答

1

你可以做的是使用IDS query。收集第一個請求中的所有文檔ID,然後使用新的Bool查詢發佈它們,該查詢包含原始query旁邊的must子句中的IDS查詢。您可以使用Scroll API高效地收集第一個請求中的ID。由於無論如何您都會返回第二個結果,因此在第一個請求中進行任何排序都沒有意義,因此您可以加快第一個請求的速度。

請參見:

+0

這是一個不錯的方法。謝謝! –

+0

不客氣。這在速度方面表現很好。你能否接受我的回答? – drjz

+0

剛接受它。謝謝! –

0

post filter是一種在其他搜索內搜索的方法。

你的情況:

GET _search 
{ 
    "query": { 
    "match": { 
     "title": "foo" 
    } 
    }, 
    "post_filter": { 
    "match": { 
     "title": "bar" 
    } 
    } 
} 

post_filter將在查詢結果來執行

+0

我不認爲它適合我的方案。我的情景是,用戶首先搜索關鍵字「foo」,並在網頁上獲得500個結果,然後選擇「在結果內進一步搜索」,在500個結果中進行第二次搜索,並希望獲得一些精緻的結果真的很快。 –