Skip to main content

全文搜尋方式總覽

全文搜尋(Full-Text Search)是在大量非結構化或半結構化文字中,依關鍵字、片語或語意找出相關內容的能力。實作方式很多,差異主要在於:要不要獨立搜尋服務資料量與查詢複雜度是否需要中文分詞/模糊比對/排序調校,以及維運成本

下面依常見分類列出主要方案;本站目前已收錄 OpenSearch 相關筆記。


方式一覽

分類代表方案典型情境
資料庫內建 FTSPostgreSQL、MySQL、SQLite資料量中小、希望少一個元件
專用搜尋引擎(自建)OpenSearch、Elasticsearch、Solr、Meilisearch、Typesense大量文件、複雜查詢、需調校 relevance
託管 / SaaSAlgolia、Azure AI Search、AWS OpenSearch Service快速上線、不想自維運叢集
快取 / 嵌入式Redis Stack(RediSearch)、Lucene 衍生函式庫低延遲、資料已在 Redis、或嵌入應用程式
文件 / NoSQL 內建MongoDB Atlas Search、Couchbase FTS文件模型為主、搜尋與主資料同叢集
語意 / 向量搜尋pgvector、Pinecone、OpenSearch k-NN以語意相似度找內容,常與關鍵字搜尋混合
簡易替代(非真正 FTS)LIKE / ILIKE、應用層過濾原型、極小資料集;不建議當正式全文搜尋

資料庫內建全文搜尋

直接在既有 RDBMS 上建索引與查詢,適合不想多維運一個搜尋服務、查詢量與資料量在中等以下的場景。

資料庫機制概要備註
PostgreSQLtsvector / tsqueryto_tsvector()、GIN / GiST 索引功能完整,中文常搭配 zhparser 等擴充
MySQLFULLTEXT 索引(InnoDB / MyISAM)5.6+ InnoDB 支援;ngram 可輔助中文
SQLiteFTS5 虛擬表嵌入式、單機、輕量
SQL ServerCONTAINS / FREETEXT、全文目錄企業環境常見

優點: 架構簡單、交易與搜尋同一資料源、備份流程一致。
限制: 複雜 relevance、聚合、高併發搜尋時,通常不如專用引擎;進階功能(同義詞、facet、建議詞)需額外開發或外掛。


專用搜尋引擎(自建)

倒排索引(inverted index)為核心,專門處理搜尋、排序、聚合與分析,適合日誌、商品、文章、知識庫等大量可搜尋內容。

方案說明
OpenSearch / Elasticsearch同一系譜的分散式搜尋與分析引擎;功能最完整,叢集維運成本較高。本站已有 OpenSearch 筆記。
Apache Solr同樣基於 Lucene,偏企業與批次索引場景
Meilisearch開源、設定簡單、即時搜尋體驗好,適合產品內搜尋
Typesense開源、低延遲、API 友善,常與 Meilisearch 比較
Manticore Search從 Sphinx 演進,支援 SQL 介面與即時索引
Sonic極輕量、適合小型索引與 autocomplete

優點: 分詞、模糊搜尋、boost、facet、highlight、聚合等成熟;可水平擴展。
代價: 需同步主資料庫與索引、監控叢集健康、版本升級與 mapping 設計。


託管與 SaaS 搜尋服務

由雲端廠商或第三方負責索引、擴展與可用性,適合快速上線、團隊不想維運 OpenSearch 叢集

服務說明
Algolia文件站、電商常見;即時索引與搜尋 UX 佳(本站 Docusaurus 筆記見 Algolia 實作
Azure AI Search(原 Cognitive Search)與 Azure 生態整合,支援向量與語意排名
AWS OpenSearch Service託管 OpenSearch / Elasticsearch,仍須理解 index 與 shard 設計
Google Programmable Search偏網站搜尋框嵌入,客製化深度有限

快取層與嵌入式方案

方案說明
RediSearch(Redis Stack)在 Redis 上做全文與 secondary index,適合已重度使用 Redis 的系統
Apache LuceneJava 生態底層;ES / Solr 皆基於此
Tantivy(Rust)、Bleve(Go)、Whoosh(Python)嵌入應用程式的搜尋函式庫,適合單機或邊緣部署

文件資料庫與 NoSQL

方案說明
MongoDB Atlas Search / 文字索引文件與搜尋同一產品線,Atlas 上功能較完整
Couchbase Full Text Search內建 FTS,適合 Couchbase 為主儲存的專案
Amazon CloudSearch較舊的 AWS 託管搜尋,新專案多改 OpenSearch Service

語意搜尋與混合搜尋

傳統 FTS 依關鍵字匹配;語意搜尋則用 embedding 向量 找「意思相近」的內容。實務上常見 hybrid search:關鍵字 + 向量分數加權。

方向代表技術
向量儲存pgvector、Milvus、Qdrant、Pinecone、Weaviate
搜尋引擎內建OpenSearch k-NN、Elasticsearch dense_vector
應用層先向量召回,再用 BM25 / 關鍵字重排

這類方案適合 FAQ、知識庫、RAG;但需額外處理 embedding 模型、索引更新與評估指標。


簡易替代(通常不算正式 FTS)

方式限制
LIKE '%keyword%' / ILIKE無法分詞、難用索引、效能差
應用層載入後 filter / includes僅適合極小資料集
外部搜尋 API(Google site:無法搜尋私有或未公開內容

原型階段可用,正式產品應規劃上述其中一類 FTS 方案。


如何選擇(簡表)

需求可優先考慮
資料已在 PostgreSQL、查詢不複雜PostgreSQL FTS
大量文件、複雜查詢、要自建OpenSearch / Elasticsearch、Meilisearch、Typesense
不想維運叢集Algolia、Azure AI Search、AWS OpenSearch Service
產品內即時搜尋、開源、好上手Meilisearch、Typesense
以語意找答案、RAG向量 DB 或 OpenSearch k-NN + hybrid
已在用 Redis 且索引不大RediSearch

本站已收錄

其他方案(PostgreSQL FTS、Meilisearch 等)可依實際專案需求再補充子頁。