Autocomplete 簡介

autocomplete 是現代軟體服務最重要的功能之一,使用者在輸入框輸入了文字,軟體服務就會回傳最適當的選項給使用者,而使用者可以依照回傳的各個選項中選擇其中一個執行動作。

Autocomplete 原理

  • Read times >>>>> write times

相關文章

  • http://oldblog.antirez.com/post/autocomplete-with-redis.html
  • https://redis.com/ebook/part-2-core-concepts/chapter-6-application-components-in-redis/6-1-autocomplete/6-1-1-autocomplete-for-recent-contacts/
  • https://redis.com/ebook/part-2-core-concepts/chapter-6-application-components-in-redis/6-1-autocomplete/6-1-2-address-book-autocomplete/
  • https://www.prefixbox.com/blog/autocomplete-search/
  • https://zh.wikipedia.org/wiki/%E8%87%AA%E5%8A%A8%E5%AE%8C%E6%88%90

Autocomplete 與 search suggestion 的差異

autocomplete 常與 search suggestion 交互使用,這裡將以 prefix 精準比對定義為 autocomplete,以中間的文字比對定義為 search suggestion。

Elasticsearch

詳細原理

Redis

詳細原理

Elasticsearch 與 Redis 的比較

比較項目 Elasticsearch Redis
寫入時間 沒比較過 沒比較過
讀取時間 因為儲存在硬碟內,所以相同關鍵字的首次讀取一定比較慢,但讀取時是使用 filter 的方式,所以 Elasticsearch 會將 filtered 的資料儲存在記憶體內,以供後續相同關鍵字使用 因為全都儲存在記憶體內,所以速度整體上一定比較快
儲存空間 在於 edge ngram 的 min ngram 及 max ngram 如果是簡單版的字母排序,儲存量遠比複雜版的少許多
儲存成本 儲存在硬碟內,成本低 儲存在記憶體內,成本高

總結

  1. 改用 es 的 edge ngram 來實作,要人工介入開發的工作少了很多,包括建 inverted index 跟分詞
  2. 另外整體算下來,es 的儲存空間可能會比 redis 要多一些,因為 es 吃硬碟,redis 吃記憶體
  3. 另外雖然 es 是走硬碟,但因為 query 語法是用 filter,所以曾經被搜過的內容會存記憶體裡面,速度應該不會明顯下降