2014-06-16 51 views
0

我正在構建一個使用Elasticsearch來存儲和檢索庫目錄數據的系統。我被要求的一件事是瀏覽界面。elasticsearch索引的順序瀏覽

下面是什麼,這是一個定義:

  • 用戶執行搜索,例如「作者開頭」,他們 供應「史密斯」
  • 系統將它們放入一箇中間作家,達到或接近 與「史密斯」開頭的第一個位置的列表,所以他們可能 看到:
Smart, Murray 
    Smart, Murray J. 
    Smeaton, Duncan 
    Smieliauskas, Wally 
    Smillie, John 
    Smith Milway, Katie <-- this being the first actual search result 
    Smith, A. M. C. 
    Smith, Andrew 
    Smith, Andrew M. C. 
    etc. 
  • 的一個與標記實際上是搜索的一個,但你可以根據排序順序看它周圍的那些,包括那些實際上並不匹配查詢。
  • 這些將被分頁,所以每頁有大約20個左右的結果。如果用戶回頁面,他們會朝向字母表的開頭,如果他們翻頁,他們將繼續前進。
  • 顯示的每個結果都會在旁邊顯示一個計數,顯示有多少結果(即目錄項)與該作者相關聯。
  • 點擊結果由筆者帶你的一切(這一切都超出了它是相當容易的,大多已經實施。)

我想知道如果任何人有如何處理這個任何好的想法。在這個階段,我並不在乎處理那些不是「以字段開頭」搜索的搜索,而是如何完成目前正在進行的搜索,並在時間到來時處理它。

下面是我在想什麼,但也有嚴重的問題,與它:

  • 所有這一切將要瀏覽的刻面
  • 我得到所有方面的列表該字段的字段,通過搜索找到起點,並在代碼中手動處理分頁。
  • 這有一個大問題,我可能會提取數十萬個術語並處理它們,這不會很快。

  • 回想起來,將所有值加載到其自己的索引中並按排序順序獲取所有值並沒有什麼不同。

我歡迎任何選擇這裏,我是否可以以某種方式跳入大集「從」字段,如查詢面的中間,或者我是否應該改爲把所有的東西到另一個指標專門爲這個目的(儘管我不知道如何構造和查詢它)或其他東西。

從我所看到的情況來看,我的理想解決方案是我可以指定facet字段,告訴ES我想從以「Smith」開頭的那個開始,並且從那裏顯示,然後我有說「去20回」的能力,但我不確定這是可能的。

你可以在這裏看到我在談論的事情的一個例子:http://hollisclassic.harvard.edu/ - 把史密斯放在「作者(姓氏第一)」,它給你一個(非常醜陋的外觀)瀏覽列表。

有什麼想法?

回答

0

在:

與標記的一個是一個實際上是搜索,但你可以 根據排序順序看它周圍的那些,包括那些 實際上並不匹配查詢。

我有類似的要求:「如果搜索條件更放鬆,向用戶顯示我們可以找到多少條記錄」。 我解決了這個問題,做了兩次搜索(一個確切的,一個更輕鬆),因爲ES的性能非常好,可以做一兩次搜索並不重要。時間在顯示中(在我的情況下)而不是在搜索中被吃掉。

仍然需要將這兩個結果合併到您的應用程序中以生成一個要顯示的列表。

+0

您將如何放鬆搜索?我想你可以把幾個字母剪下來,或者如果它已經是長度爲1的話,可以把它放到幾個相鄰的字母上。如果你沒有從擴展搜索中得到足夠的結果,我想可能需要幾次迭代。 –

+0

在我的情況下放鬆搜索意味着離開一個方面(語言)。但是對於作者可能留下一兩封信的情況來說,這是正確的。您可以只進行一次計數,直到找到一個較大的結果集,然後再次執行搜索以加載字段。取決於你手頭有多少表現。 –