Solr安装与配置 #
一、环境要求 #
1.1 系统要求 #
| 要求 | 说明 |
|---|---|
| Java | JDK 11 或更高版本(Solr 9.x需要JDK 17+) |
| 内存 | 最小2GB,推荐4GB以上 |
| 磁盘 | 根据数据量决定,建议SSD |
| 操作系统 | Linux/Windows/macOS |
1.2 检查Java环境 #
bash
# 检查Java版本
java -version
# 输出示例
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
1.3 设置JAVA_HOME #
bash
# Linux/macOS
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH
# 添加到 ~/.bashrc 或 ~/.zshrc
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
powershell
# Windows PowerShell
$env:JAVA_HOME = "C:\Program Files\Java\jdk-17"
$env:Path = "$env:JAVA_HOME\bin;$env:Path"
二、Linux安装 #
2.1 下载安装 #
bash
# 下载Solr
wget https://archive.apache.org/dist/solr/solr/9.4.0/solr-9.4.0.tgz
# 解压
tar -xzf solr-9.4.0.tgz
# 进入目录
cd solr-9.4.0
2.2 启动Solr #
bash
# 前台启动(开发环境)
bin/solr start
# 指定端口启动
bin/solr start -p 8984
# 后台启动
bin/solr start -d
# SolrCloud模式启动
bin/solr start -c -p 8983
2.3 停止Solr #
bash
# 停止所有Solr实例
bin/solr stop -all
# 停止指定端口
bin/solr stop -p 8983
2.4 检查状态 #
bash
# 检查Solr状态
bin/solr status
# 输出示例
Found 1 Solr nodes:
Solr process 12345 running on port 8983
{
"solr_home":"/opt/solr/server/solr",
"version":"9.4.0",
"startTime":"2026-03-27T10:00:00.000Z",
"uptime":"0 days, 0 hours, 5 minutes",
"memory":"100 MB of 512 MB"}
三、Windows安装 #
3.1 下载安装 #
powershell
# 使用PowerShell下载
Invoke-WebRequest -Uri "https://archive.apache.org/dist/solr/solr/9.4.0/solr-9.4.0.zip" -OutFile "solr-9.4.0.zip"
# 解压
Expand-Archive -Path solr-9.4.0.zip -DestinationPath .
3.2 启动Solr #
powershell
# 进入目录
cd solr-9.4.0
# 启动
.\bin\solr.cmd start
# 指定端口
.\bin\solr.cmd start -p 8984
3.3 停止Solr #
powershell
# 停止
.\bin\solr.cmd stop -all
# 停止指定端口
.\bin\solr.cmd stop -p 8983
四、macOS安装 #
4.1 使用Homebrew #
bash
# 安装Solr
brew install solr
# 启动服务
brew services start solr
# 停止服务
brew services stop solr
# 重启服务
brew services restart solr
4.2 手动安装 #
bash
# 下载
curl -O https://archive.apache.org/dist/solr/solr/9.4.0/solr-9.4.0.tgz
# 解压
tar -xzf solr-9.4.0.tgz
# 启动
cd solr-9.4.0
bin/solr start
五、Docker安装 #
5.1 单节点部署 #
bash
# 拉取镜像
docker pull solr:9.4
# 启动容器
docker run -d \
--name solr \
-p 8983:8983 \
-v solr_data:/var/solr \
solr:9.4
# 创建Core
docker exec -it solr solr create_core -c mycore
5.2 SolrCloud部署 #
yaml
# docker-compose.yml
version: '3'
services:
zookeeper:
image: zookeeper:3.8
container_name: zookeeper
ports:
- "2181:2181"
environment:
- ZOO_MY_ID=1
solr1:
image: solr:9.4
container_name: solr1
ports:
- "8983:8983"
environment:
- ZK_HOST=zookeeper:2181
depends_on:
- zookeeper
solr2:
image: solr:9.4
container_name: solr2
ports:
- "8984:8983"
environment:
- ZK_HOST=zookeeper:2181
depends_on:
- zookeeper
bash
# 启动集群
docker-compose up -d
# 创建Collection
docker exec -it solr1 solr create_collection -c mycollection -shards 2 -replicationFactor 2
六、目录结构 #
6.1 Solr安装目录 #
text
solr-9.4.0/
├── bin/ # 启动脚本
│ ├── solr # Linux/macOS启动脚本
│ ├── solr.cmd # Windows启动脚本
│ └── solr.in.sh # 环境变量配置
├── contrib/ # 贡献模块
│ ├── analysis-extras/ # 额外分析器
│ ├── dataimporthandler/ # 数据导入处理器
│ └── clustering/ # 聚类组件
├── dist/ # Solr JAR文件
├── example/ # 示例配置
├── licenses/ # 许可证文件
└── server/ # 服务器目录
├── solr/ # Solr Home(默认)
├── solr-webapp/ # Web应用
└── logs/ # 日志目录
6.2 Solr Home目录 #
text
server/solr/
├── solr.xml # Solr全局配置
├── configsets/ # 配置集模板
│ └── _default/ # 默认配置集
│ ├── conf/
│ │ ├── solrconfig.xml
│ │ ├── schema.xml (或 managed-schema)
│ │ └── lang/
│ └── core.properties
└── mycore/ # 自定义Core
├── conf/
│ ├── solrconfig.xml
│ ├── managed-schema
│ └── lang/
├── data/ # 索引数据
└── core.properties # Core配置
七、核心配置文件 #
7.1 solr.xml #
xml
<?xml version="1.0" encoding="UTF-8"?>
<solr>
<solrcloud>
<str name="host">${host:}</str>
<int name="hostPort">${jetty.port:8983}</int>
<str name="hostContext">${hostContext:solr}</str>
<bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
<int name="zkClientTimeout">${zkClientTimeout:30000}</int>
<int name="distribUpdateSoTimeout">${distribUpdateSoTimeout:600000}</int>
<int name="distribUpdateConnTimeout">${distribUpdateConnTimeout:60000}</int>
</solrcloud>
<shardHandlerFactory name="shardHandlerFactory"
class="HttpShardHandlerFactory">
<int name="socketTimeout">${socketTimeout:600000}</int>
<int name="connTimeout">${connTimeout:60000}</int>
</shardHandlerFactory>
</solr>
7.2 solrconfig.xml #
xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<luceneMatchVersion>9.4</luceneMatchVersion>
<lib dir="${solr.install.dir:../../../..}/contrib/" regex=".*\.jar" />
<dataDir>${solr.data.dir:}</dataDir>
<directoryFactory name="DirectoryFactory"
class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>
<indexConfig>
<maxFieldLength>10000</maxFieldLength>
<writeLockTimeout>1000</writeLockTimeout>
<useCompoundFile>false</useCompoundFile>
</indexConfig>
<updateHandler class="solr.DirectUpdateHandler2">
<maxPendingDeletes>1000</maxPendingDeletes>
<autoCommit>
<maxTime>15000</maxTime>
<openSearcher>false</openSearcher>
</autoCommit>
<autoSoftCommit>
<maxTime>1000</maxTime>
</autoSoftCommit>
</updateHandler>
<query>
<maxBooleanClauses>1024</maxBooleanClauses>
<enableLazyFieldLoading>true</enableLazyFieldLoading>
<queryResultWindowSize>20</queryResultWindowSize>
<queryResultMaxDocsCached>200</queryResultMaxDocsCached>
</query>
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
</lst>
</requestHandler>
<requestHandler name="/update" class="solr.UpdateRequestHandler"/>
<requestHandler name="/analysis/field"
class="solr.FieldAnalysisRequestHandler"/>
</config>
7.3 managed-schema #
xml
<?xml version="1.0" encoding="UTF-8"?>
<schema name="example" version="1.6">
<uniqueKey>id</uniqueKey>
<fieldType name="string" class="solr.StrField"/>
<fieldType name="long" class="solr.TrieLongField"/>
<fieldType name="text_general" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="id" type="string" indexed="true" stored="true" required="true"/>
<field name="title" type="text_general" indexed="true" stored="true"/>
<field name="content" type="text_general" indexed="true" stored="true"/>
<field name="timestamp" type="long" indexed="true" stored="true"/>
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
<dynamicField name="*_t" type="text_general" indexed="true" stored="true"/>
</schema>
八、内存配置 #
8.1 JVM参数配置 #
bash
# 编辑 bin/solr.in.sh (Linux/macOS)
SOLR_JAVA_MEM="-Xms2g -Xmx4g"
# 编辑 bin/solr.in.cmd (Windows)
set SOLR_JAVA_MEM=-Xms2g -Xmx4g
8.2 启动时指定内存 #
bash
bin/solr start -m 4g
九、验证安装 #
9.1 访问管理界面 #
打开浏览器访问:http://localhost:8983/solr
9.2 创建测试Core #
bash
# 创建Core
bin/solr create_core -c test_core
# 输出
Created new core 'test_core'
9.3 测试索引和查询 #
bash
# 索引文档
bin/post -c test_core example/exampledocs/books.json
# 查询
curl "http://localhost:8983/solr/test_core/select?q=*:*"
十、常见问题 #
10.1 端口被占用 #
bash
# 查看端口占用
lsof -i :8983
# 或
netstat -tlnp | grep 8983
# 杀掉进程
kill -9 <PID>
10.2 内存不足 #
bash
# 增加内存
SOLR_JAVA_MEM="-Xms4g -Xmx8g" bin/solr start
10.3 权限问题 #
bash
# 修改目录权限
chmod -R 755 /path/to/solr
chown -R solr:solr /path/to/solr
十一、总结 #
安装要点:
| 步骤 | 说明 |
|---|---|
| 环境检查 | 确保Java版本正确 |
| 下载安装 | 选择合适的安装方式 |
| 启动服务 | 单机或SolrCloud模式 |
| 创建Core | 创建索引存储单元 |
| 验证安装 | 访问管理界面测试 |
下一步,让我们学习Solr的核心概念!
最后更新:2026-03-27