2014-02-20 160 views
3

由於this question中概述的原因,我建立了自己的客戶端搜索引擎,而不是使用基於fullproofydn-full-text庫。歸結起來,fullproof會產生300.000條記錄的「太多令人震驚的記錄」,而(在發音之後),只有大約7700個獨特的詞。所以我的「理論」是fullproof是基於其僅適用於服務器端的傳統假設:客戶端搜索引擎優化

  • 巨大的指標都很好
  • 處理器電源價格昂貴
  • (和處理更長的記錄的假設這僅僅是適用於我的情況下,我的記錄是平均24個字只有)

而在客戶端:

  • 巨大的指數採取年齡來填充
  • 處理能力仍然是有限的,但不是在服務器端

基於這些假設我有一個基本的倒排索引(給剛7700記錄作爲開始的相對便宜IndexedDB是一個文檔/ nosql數據庫)。使用蘭開斯特詞幹(這是兩種或三種流行詞彙中最具侵略性的一種)推測這個倒排索引,並且在搜索期間,我將檢索每個詞的索引,根據不同索引的重疊和相似度輸入單詞vs原始(Jaro-Winkler距離)。

問題這種方法的:

  • 結合「popular_word + popular_word」的極其昂貴

所以,終於等到我的問題:我如何能緩解上述問題以最小的增長的索引?我確實明白我的方法是CPU密集型的,但是由於傳統的全文搜索索引看起來非常大,這似乎是唯一合理的途徑。 (指着我好資源或作品也可以理解)

這是非結構化的文本翻譯成小片段,但這種人爲的分裂相關領域標準化的或多或少的人爲分割所以一直在這裏所用好。我還沒有研究過將這些「片段」放在一起並在fullproof上投擲大量文本的索引大小的影響。我認爲這不會產生巨大的影響,但如果我錯了,那麼請指出這一點。

回答

3

這是一個很好的問題,感謝您爲the IndexedDB tag帶來一些質量。

儘管此答案尚未完全準備就緒,但我想告訴您,如果您使用--enable-experimental-web-platform-features啓動Chrome,那麼應該有一些可用的功能可幫助您實現所期望的功能。

  • IDBObjectStore.openKeyCursor()

      - 價值無涉的遊標,如果你能逃脫幹只
    • IDBCursor.continuePrimaryKey(key, primaryKey) - 讓您使用相同的密鑰

    我通過這些通知跳過項目Chrome團隊的一名IDB開發人員,雖然我還沒有對它們進行實驗,但這似乎是一個完美的使用案例。

    我的想法是,如果您在同一列上使用兩個不同的索引來解決這個問題,那麼您可能能夠獲得類似於連接的行爲,而不會讓您的商店出現無用的索引。

    雖然consecutive writes在IDB中非常糟糕,但是閱讀很棒。 7700個參賽作品的良好表現應該是相當成功的。

  • +0

    'openKeyCursor'和'continuePrimaryKey'真棒! –

    +0

    continuePrimaryKey這是有些只能在chrome中使用的東西嗎?另一種方法是用nextunique或prevunique的方向打開openkeycursor –

    +0

    我還沒有完全包圍我的頭,但我認爲'continuePrimaryKey'允許你同時使用兩個不同的索引:被查詢的索引和「主要」指數。 – buley