You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Solrj集成到基于Tomcat 9的动态Web项目中?

在Tomcat 9动态Web项目中用Solrj连接Solr 7的实现方案

Hey there! 先给你吃颗定心丸:用Solrj在Tomcat 9的动态Web项目里调用Solr 7完全可行,你之前添加Solrj项目没成功大概率是依赖配置或者项目整合的步骤出了问题,下面我一步步给你讲清楚正确的实现方式:

一、先搞定Solrj的依赖引入

这是最容易踩坑的环节,分两种场景处理:

1. 用Maven管理项目(推荐)

如果你的Web项目是Maven构建的,直接在pom.xml里添加和Solr 7版本匹配的Solrj依赖(比如Solr 7.7.3对应Solrj 7.7.3):

<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>7.7.3</version>
</dependency>

Maven会自动帮你下载所有关联依赖包,不用手动折腾。

2. 手动引入jar包

如果是普通动态Web项目,需要从Solr安装包的server/solrj-lib目录下,把所有jar包复制到Web项目的WEB-INF/lib文件夹里——Solrj依赖很多基础包,少一个都可能导致项目启动失败或者调用出错。

二、Web项目中Solrj的核心代码实现

我给你写一个简单的工具类+Servlet示例,用来测试Solr连接和查询:

1. Solr操作工具类

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocumentList;

public class SolrUtil {
    // 替换成你自己的Solr核心地址,格式:http://Solr服务器IP:端口/solr/你的核心名
    private static final String SOLR_URL = "http://localhost:8983/solr/my_test_core";

    public static void queryAllDocs() throws Exception {
        // 用try-with-resources自动关闭客户端,避免资源泄漏
        try (SolrClient solrClient = new HttpSolrClient.Builder(SOLR_URL).build()) {
            // 构建查询条件
            SolrQuery query = new SolrQuery();
            query.setQuery("*:*"); // 查询所有文档
            query.setStart(0);
            query.setRows(10); // 只取前10条

            // 执行查询
            QueryResponse response = solrClient.query(query);
            SolrDocumentList results = response.getResults();

            // 打印结果(实际项目里可以返回给前端或者做其他处理)
            System.out.println("查询到文档总数:" + results.getNumFound());
            for (int i = 0; i < results.size(); i++) {
                System.out.println("文档" + (i+1) + ":" + results.get(i));
            }
        }
    }
}

2. 测试用Servlet

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/solrTest")
public class SolrTestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            SolrUtil.queryAllDocs();
            response.getWriter().write("Solr查询成功!可以去控制台看结果~");
        } catch (Exception e) {
            e.printStackTrace();
            response.getWriter().write("Solr查询失败:" + e.getMessage());
        }
    }
}

三、针对你“添加Solrj项目未成功”的排查方向

  • 依赖冲突:Tomcat本身自带一些jar包(比如commons-logging),如果和Solrj的依赖版本冲突,会出现ClassNotFoundException或者NoSuchMethodError。解决方法:检查WEB-INF/lib里的jar包,删掉和Tomcat/lib重复的包,或者调整Solrj版本。
  • Solr服务问题:先确认Solr 7服务正常启动,代码里的SOLR_URL有没有写错(比如核心名、端口号)。
  • 部署遗漏:手动复制jar包后,要确保所有Solrj相关jar都在WEB-INF/lib下,并且重启Tomcat重新部署项目——有时候Tomcat不会自动检测到新添加的jar包。
  • 权限验证:如果你的Solr设置了账号密码,需要在客户端里添加认证信息:
HttpSolrClient.Builder builder = new HttpSolrClient.Builder(SOLR_URL);
builder.withBasicAuth("你的用户名", "你的密码");
SolrClient solrClient = builder.build();

四、可行性说明

Solrj是Apache官方为Solr量身打造的Java客户端,专门用于Java程序和Solr服务交互;而Tomcat作为标准的Java Web容器,完全支持运行包含Solrj代码的Web项目。只要依赖配置正确、代码逻辑没问题,查询、新增、修改、删除Solr文档这些操作都能顺利实现。

内容的提问来源于stack exchange,提问作者manal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:10:53