2014-07-22 21 views
1

我需要從兩個單獨的索引中返回來自4個獨立建議者的建議。如何僅使用建議者執行Elasticsearch Multisearch?

我目前正在通過向Elasticsearch發送兩個單獨的請求(每個索引一個)並將結果組合到我的應用程序中來完成此操作。顯然這在Multisearch API可用時看起來並不理想。

從使用Multisearch API我能夠將這些建議請求合併爲一個,它能夠從兩個索引中正確檢索來自所有4個完成建議的結果。

但是,它也會自動對所選索引執行match_all查詢。我當然可以通過將searchType設置爲count來最大限度地減少這種影響,但結果比兩個單獨的捲曲請求更差。

看來,無論我嘗試什麼,我都無法阻止Multisearch API對每個索引執行某種查詢。

例如

{ 
     index: 'users', 
     type: 'user' 
    }, 
    { 
     suggest: { 
      users_suggest: { 
       text: term, 
       completion: { 
        size : 5, 
        field: 'users_suggest' 
       } 
     } 
    }, 
{ 
     index: 'photos', 
     type: 'photo' 
}, 
{ 
     suggest: { 
      photos_suggest: { 
       text: term, 
       completion: { 
        size : 5, 
        field: 'photos_suggest' 
       } 
      } 
     } 
} 

等,其清楚省略了該multisearch請求的{query:{}部分以上的請求,還是執行match_all查詢和在索引中返回的一切。

有沒有辦法阻止查詢發生,以便我可以簡單地獲得組合的完成建議結果?或者還有另一種方法可以在一個查詢中搜索多個索引中的多個提示?

在此先感謝

回答

1

一定要讓大小= 0,這樣就沒有命中將被退回,但僅僅是建議。

{ 
    "size": 0, 
    "suggest":{} 
} 

對於每個請求。

+0

完全按照您的建議進行操作確實可以防止返回結果,但它仍會返回總計數。這對我意味着Elasticsearch仍然在執行一些不需要的工作,就像我只是簡單地將searchType設置爲count一樣。或者我錯了? – Gordo

+0

是的,如果您有搜索請求,那麼elasticsearch將默認搜索文檔,並在指定的情況下執行其他操作(聚合,刻面和提示)。事情是,如果我們不需要任何文檔(指定size = 0),那麼該操作將在少量時間內執行。 – progrrammer

+0

非常感謝您的澄清 – Gordo