linux下solr的安装以及在springboot中的集成

    科技2025-06-02  35

    文章目录

    为什么要用全文搜索引擎linux下安装solrsolr与springboot的简单集成参考文章

    为什么要用全文搜索引擎

    Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。

    Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

    solr本身也可以看成数据库,(no sql类型),但它比数据库搜索速度更快,所以在项目中我们一般把搜搜的部分交给solr,就像我们在京东首页所看到的商品信息,并不是来自数据库,而是来源于sorl的索引库

    数据库本身不能实现分词效果,而只能使用模糊查询,但是模糊查询非常低效,查询速度比较慢,由于在实际生活中,一般搜索是用的比较多的,这样数据库压力自然就很大,所以我们就让供专业的solr来做搜索功能

    linux下安装solr

    解压solr tar zxvf solr-5.5.5.tgz 创建Solr数据和安装目录 mkdir -p /data/solr /usr/local/solr 安装solr(进入 solr-5.5.5/bin/ 目录) ./install_solr_service.sh /opt/solr-5.5.5.tgz -d /data/solr -i /usr/local/solr/ Solr安装时,会自动创建一个solr用户,可以进入/etc/passwd中查看 cat /etc/passwd 如未创建用户则进行手工创建 groupadd solr useradd -g solr solr 给Solr用户授权,防止创建core无权限的情况 chown -R solr.solr /data/solr /usr/local/solr 查看Solr状态 service solr status Solr命令 启动 service solr start 停止 service solr stop 重新启动 service solr restart 创建一个新的core su - solr -c "/usr/local/solr/solr/bin/solr create -c javasm(core名称) -n data_driven_schema_configs" core相当于一个文档集,存放着文档,文档字段类型配置,索引等等信息 将solr端口加入防火墙白名单 firewall-cmd --permanent --zone=public --add-port=8983/tcp firewall-cmd --reload 访问Solr管理界面 http://192.168.14.204:8983

    solr与springboot的简单集成

    添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-solr</artifactId> </dependency>

    配置文件配置

    service代码

    // javasm为安装时创建的core @Service public class SolrServiceImpl implements SolrService { @Resource private SolrClient solrClient; @Override public String add(Integer aid, String aname) { // TODO: 添加到数据库 if (aid != null && !StringUtils.isEmpty(aname)) { new Thread(() -> { // TODO: 添加到redis // 添加到solr SolrInputDocument sid = new SolrInputDocument(); sid.addField("aid", aid); sid.addField("aname", aname); try { solrClient.add("javasm", sid); solrClient.commit("javasm"); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }).start(); return "success"; } return "error"; } @Override public SolrDocumentList query(String query) { if (!StringUtils.isEmpty(query)) { // 创建查询对象 SolrQuery solrQuery = new SolrQuery(); // 设置检索条件 solrQuery.setQuery(query); try { // 获得响应对象 QueryResponse query1 = solrClient.query("javasm", solrQuery); // 从响应对象中获取数据 SolrDocumentList results = query1.getResults(); return results; } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return null; } }

    参考文章

    全文搜索引擎 ElasticSearch 还是 Solr? 手把手教你如何玩转Solr(包含项目实战)

    Processed: 0.012, SQL: 8