全文檢索相關名詞及概念理解 (Solr, Lunr) 關鍵字搜尋實作與觀念解析

Lin Yen-Cheng on 2018-04-06 5 min. read

索引觀念解析

以前高中讀的單字書,印象中只有分級沒有經過排序,但可能有單字間的相關性?是為了方便記憶及背誦?字典就比較不一樣,字典會有個按照發音或是筆劃所建立目錄或索引,而透過排序過的索引,能夠進一步增加我們查閱的速度。

生活上來說就像平常我的衣服是亂糟糟整坨放床上的 XD 但透過這種概念,我會把它分成短袖長袖短褲長褲… 這樣每次要跑步找短褲會比較快,直接到短褲區找就好了,當然破萬筆的索引沒那麼簡單 xddd

反向索引

全文檢索引擎用的是反向索引,最簡單的做法是先把句子切分詞,"他" "原理" "像" "是" "這樣" "會" "切字" 然後透過分詞統計值運算後找那些分詞最有可能在的位置。底下的例子我們如果搜尋 bright butterfly 就是 {1,3} ∩ {1} 得到 1 所以我們可以得到 Document 1 的結果。

Elasticsearch V/s Relational Database from Richa Budhraja

這次 google 亂數英文會出現中文 “陳菊 善款”,我感覺現在是 “尚未被妥善切分的詞” 且搜尋結果 “不滿幾筆” 的話,就最後再塞一筆有被花錢購買的關鍵字詞 “陳菊 善款”,應該是最簡單的實作方式。

另外可以試看看,底下推文說地區改成台灣以外就不會有這樣的情形,看起來是只買台灣 🙃🙃🙃

Solr、Elasticsearch

最後重點,推薦!!! Solr、Elasticsearch 都很好用 XD 實作上也相當的簡單? 關鍵就是要餵原始資料然後告訴 Solr 要將哪些欄位建立索引,未來就可以直接透過索引來找資料了,厲害的 Solr 也有提供空間資料的檢索,透過定義經緯度 ( lat, lng ),就可以簡單的做出搜尋我附近的美食這種功能惹,簡單吧 XDDD

Lunr

如果需要在前端使用全文檢索,Lunr 提供了一個輕量化的函式庫,當然分詞的部分是以英文為主,網路上就有人提供了一個中文的分詞,開源的時代真的是很需要大家互相協助,希望有一天自己也可以。

https://github.com/Wiredcraft/lunr-chinese

而我也在自己實作的咖啡地圖中就採用了這個檢索,原因我並沒有實作後端,後端是串接開源的資料,每次縣市回來就是 500 筆以上,使用這樣的檢索引擎可以更快速的幫我找到要找到的資料。

開源的資料:
https://cafenomad.tw/developers/docs/v1.2


喜歡這篇文章,請幫忙拍拍手喔 🤣

share