Apache Solr 是基於 Lucene 的企業級搜索服務平台,提供 RESTful API、豐富查詢語法、分佈式索引與高可用集群能力。本文從架構原理、核心優勢、典型應用場景三個維度,幫你快速建立 Solr 整體認知。
Solr 是一個獨立的企業級搜索應用服務器,對外暴露類 Web Service 的 HTTP API。用戶可通過 HTTP 請求:
它基於 Java 開發,運行於 Servlet 容器(如 Tomcat、Jetty)中,底層核心是 Apache Lucene。
| 維度 | Solr 特性 | 對比純 Lucene 優勢 |
|---|---|---|
| 查詢語言 | Solr Query Syntax / Lucene Query Parser / DisMax / eDisMax | 支援分面搜索、高亮、拼寫糾錯、分組、空間搜索等開箱即用功能 |
| 配置靈活性 | schema.xml / solrconfig.xml 定義字段類型、分析器、請求處理器 | 無需寫 Java 代碼即可調整索引/查詢行為 |
| 分佈式能力 | SolrCloud(ZooKeeper 協調)支援分片、副本、故障轉移、負載均衡 | 原生水平擴展,支援 PB 級數據 |
| 管理界面 | 內建 Admin UI(儀表板、Schema 瀏覽、查詢調試、集群監控) | 可視化運維,降低學習曲線 |
| 擴展性 | 插件式架構:自定義 Tokenizer、Filter、QueryParser、UpdateRequestProcessor | 業務邏輯解耦,支援熱加載 |
| 性能優化 | 查詢緩存、過濾器緩存、文檔緩存、自動預熱、近實時搜索 (NRT) | 生產級吞吐與延遲保障 |
# 1. 下載解壓
wget https://archive.apache.org/dist/lucene/solr/9.4.1/solr-9.4.1.tgz
tar -xzf solr-9.4.1.tgz
# 2. 啟動內嵌 Jetty
cd solr-9.4.1
bin/solr start -p 8983
# 3. 創建 Core
bin/solr create -c products -d _default
# 4. 索引測試數據 (JSON)
curl -X POST -H 'Content-Type: application/json' \
--data-binary '[{"id":"1","name_t":"紅米 Note 12","price_f":1299,"cat_s":"手機"}]' \
https://localhost:8983/solr/products/update?commit=true
# 5. 查詢驗證
curl "https://localhost:8983/solr/products/select?q=紅米&wt=json&indent=true"
numShards、replicationFactor、maxShardsPerNode-Xms16g -Xmx16g -XX:+UseG1GC -XX:MaxGCPauseMillis=200,預留堆外內存給 Lucene 索引文件緩存forceMerge 減少段數量| 維度 | Solr | Elasticsearch |
|---|---|---|
| 架構模式 | Master-Slave / SolrCloud (CP) | Peer-to-Peer (AP) |
| 文檔更新 | 近實時 (NRT),软提交 | 近實時,refresh_interval 默認 1s |
| 查詢 DSL | 標準查詢解析器 + 參數化 | JSON-based Query DSL |
| 分面/聚合 | 成熟穩定,功能豐富 | 聚合框架極其強大靈活 |
| 運維複雜度 | 較高(需獨立 ZooKeeper) | 較低(內建 Zen Discovery) |
| 生態集成 | Hadoop/Spark/HBase 官方連接器 | ELK Stack、Beats、Logstash 生態極豐富 |
建議:強一致性、複雜分面、傳統企業級應用首選 Solr;日志分析、指標監控、快速迭代、團隊熟悉 JSON DSL 首選 Elasticsearch。
Solr 作為成熟的企業級搜索平台,以「開箱即用的豐富功能、靈活的配置化能力、穩健的分佈式架構」著稱。掌握 Schema 設計、SolrCloud 集群運維、查詢調優三大核心技能,即可應對從千萬到億級文檔的全文搜索、日志分析、推薦系統等多元場景需求。