Elastic App Search 全文檢索教學 搜尋引擎架設指南與資料檢索效率優化技巧

me
林彥成
2020-09-06 | 4 min.
文章目錄
  1. 1. 什麼是 Elastic App Search?
  2. 2. App Search 簡介
    1. 2.1. App Search 優化
  3. 3. 索引觀念解析
    1. 3.1. 反向索引
    2. 3.2. Solr、Lunr
  4. 4. FAQ:Elastic App Search 快速上手常見問題
    1. 4.1. Q1:Elastic App Search 與原生的 Elasticsearch 有什麼區別?
    2. 4.2. Q2:使用 App Search 會增加我的維護成本嗎?
    3. 4.3. Q3:App Search 支援中文搜尋嗎?

什麼是 Elastic App Search?

Elastic App Search 是基於 Elasticsearch 構建的一個強大且易用的全文檢索引擎解決方案,專為簡化搜尋體驗的開發而設計。其核心價值在於提供「開箱即用」的搜尋功能,讓開發者透過 Elastic Cloud Search 服務在幾分鐘內完成搜尋引擎架設。App Search 整合了直覺的管理介面,支持同義詞搜尋權重調整字詞糾正等優化工具,並提供豐富的 API 與 UI 範例程式(如 React SDK)。它能有效解決傳統資料庫在處理大規模全文檢索時的效能瓶頸,是提升網站搜尋功能與資料檢索效率的最佳選擇。


這篇文章將示範如何使用 Elastic App Search,這是一個強大的全文檢索引擎。透過 Elastic Cloud Search 服務,您可以在幾分鐘內快速完成搜尋引擎架設,包括所有相關設定與資料匯入,實現高效能的資料檢索。本文也將探討 App Search 優化的技巧,協助您打造最佳的搜尋體驗。

App Search 簡介

為什麼需要全文檢索引擎

  • 什麼資料如果都直接對 DB 操作,資料量到某個程度時絕對不堪負荷
  • 比起結構化的資料庫能提供更好的大海撈針能力
  • 結果的同義詞搜尋與索引權重調整等功能

解決的痛點:

  • 前後端原則上開箱即用,微調即可
  • 大海撈針的效能棒
  • 容易客製化搜尋結果,每筆搜尋結果都依分數排序,分數算法可以調整
  • 加機台更容易

每個 App Search 都是一個獨立的引擎負責:

  • 搜尋 Elasticsearch 中的資料
  • 提供 API 整合調整資料來源到 Elasticsearch
  • 提供 API 與程式或使用者介面互動

使用方式:

  • 上傳資料,這次使用的是開源的咖啡廳資料

  • 前後端都開箱即用,前端在設定好後還有 react 版本的範例程式提供下載

    先進行欄位相關的設定: 要搜尋的標題、需要篩選和排序的欄位
    Elastic App Search Reference UI 欄位設定

    UI 範例程式 Demo 與下載
    Elastic App Search Sample UI 範例程式

App Search 優化

資料上傳後 App Search 也提供了好幾種的優化方式,可以調整的部分如下

  • Schema (調整欄位的性質)
  • Synpnyms (同義詞搜尋)
  • Curation (字詞糾正)
  • Relevance(欄位權重調整)

Schema (調整欄位的性質): 預設都是 text,需要把數字跟位置設成對應格式
Elastic App Search Schema 欄位類型設定

Synpnyms (同義詞搜尋): 當搜尋的關鍵字沒有結果時,可以給那個關鍵字一個接近的字詞
譬如一夜乾找不到的話,一夜乾就可以搭配虱目魚同義詞,之後就可以得到虱目魚的相關結果
Elastic App Search Synonyms 同義詞設定

Curation (字詞糾正): 有些結果不想顯示、或是想要讓某些結果顯示在前面
Elastic App Search Curation 字詞糾正

Relevance(欄位權重調整): 標題跟敘述,會希望標題吻合的分數更高
Elastic App Search Relevance 欄位權重調整

索引觀念解析

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

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

反向索引

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

此 Slideshare 投影片深入比較了 Elasticsearch關聯式資料庫在全文檢索和資料處理上的差異,是理解兩種技術優勢的絕佳資源。

Elasticsearch 與關聯式資料庫比較圖表 from Richa Budhraja

Solr、Lunr

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

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

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

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

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


FAQ:Elastic App Search 快速上手常見問題

Q1:Elastic App Search 與原生的 Elasticsearch 有什麼區別?

A:Elasticsearch 是底層的分散式搜尋與分析引擎,功能強大但設定相對複雜。Elastic App Search 則是建立在 Elasticsearch 之上的產品層,將繁瑣的索引管理、分詞配置與權重算法封裝成簡單的 API 與視覺化介面。對於需要快速上線搜尋功能,且不想深入研究 Elasticsearch 複雜設定的團隊來說,App Search 是更有效率的選擇。

Q2:使用 App Search 會增加我的維護成本嗎?

A:相反地,App Search 旨在降低維護成本。透過 Elastic Cloud Search 託管服務,硬體維護與縮放由雲端負責。開發者只需專注於數據匯入與 App Search 優化(如調整 Relevance 或 Synonyms),且內建的 Analytics 功能能讓您一眼看出哪些關鍵字沒有搜尋結果,進而快速調整策略。

Q3:App Search 支援中文搜尋嗎?

A:支援。雖然 App Search 的預測分詞與部分高級功能針對英文進行了深度優化,但它基於 Elasticsearch 的強大生態,支持多國語言處理。對於中文環境,您可以透過自定義 Schema 或在底層 Elasticsearch 配置中文分詞器(如 IK 或 ICU)來獲得高品質的中文全文檢索結果。



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