最近在用java写一个网站,想要在里面做一个搜索引擎,选用的技术是现在比较常见的Solr
如果你是初学者,我想,这篇分享博客肯定会有帮助。
它的使用宏观上分为下面一步:
- 进行环境配置
- 增加新域【域就像数据库里面的一个表,用来管理索引和相关配置。】
- 添加中文分词器
- java与Solr的结合【solrJ】
- 项目的发布过程【Solr和java项目的URL】
6.在eclipse里面启动tomcat和在本地启动tomcat的区别
下面进行一步一步的写。
一、进行环境配置
Solr的环境配置一共有两种方式:
一种是Solr与Tomcat的配置,主要的思想就是将Solr配置在Tomcat的安装目录webapps下,在启动Tomcat之后,Solr自动被识别,然后执行。
第二种是solr服务器使用jetty运行solr服务器,直接使用Solr默认的端口号进行访问。
我这次选用了Tomcat的配合。这次就主要说说这个配置的注意事项。
关于Solr与Tomcat的配置,好多博客都有写:
推荐大家一个博客
【 http://www.cnblogs.com/shanheyongmu/p/6268468.html 】
我当时是按照这个博客进行的配置,内容比较细致,适合初学者。
建议大家使用一个博客进行配置,多个博客,因为博主个人的兴趣和习惯,有些配置文件的名称不一致,容易导致大家配置过程中出现冲突。
做到这一步,前面的配置已经完成了,可以进行测试。
【 localhost:8080/solr/index.html 】
启动tomcat之后,访问这个网址,成功,就说明可以进行下一步的操作了。
二、增加新域
这个过程没有什么特别提示大家的,这里面有个概念问题。 Solr里面的core就像数据库里面的一个表,用来管理索引和相关配置。
每次新创建一个之后,都要在目录里面重新建立一个文件夹用来存放这个,名字不能重复,否则报错。
相关博客推荐:
https://blog.csdn.net/a897180673/article/details/79403952
一定要寻找和自己下载的Solr版本相同的配置教程,因为Solr4与之后在配置上有比较大的区别。
这部分比较简单,也不多介绍了。
三、添加中文分词器
中文分词器分为很多种,目前市场上最为普遍的有11种,下面是这10种分词器的比较
https://blog.csdn.net/huangliuyu00/article/details/79491513
然后在这里面选用一款自己比较中意的中文分词器,个人感觉这11种在日常的开发中,没有什么多大的区别
我自己选择的是smartcn,后面会添加个人代码的。
四、java与Solr的结合
在上面的配置和安装都进行完成之后,就到了solr的真正使用阶段了,这个阶段,我看到网上有很多的例子,大家一定要注意Solr的版本问题,我之前模模糊糊选择了一个,操作配置了好久之后才发现404错误,是因为内部的转化不对。
我操作的是Solr7.1.2,使用的是SolrJ
现在粘贴上我自己的代码:
public class SolrUtils {
// 指定solr服务器的地址
private final static String SOLR_URL = "http://localhost:8080/solr/";
// 创建一个客户端
public HttpSolrClient createSolrServer() {
HttpSolrClient solr = null;
solr = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000).withSocketTimeout(60000).build();
return solr;
}
// 添加文档
public void addDoc() throws SolrServerException, IOException {
// 构造一篇文档
SolrInputDocument document = new SolrInputDocument();
// 往doc中添加字段,在客户端这边添加的字段必须在服务端中有过定义
document.addField("id", " ");
document.addField("name", " ");
document.addField("descriptions", " ");
// 获得一个solr服务端的请求,去提交 ,选择具体的某一个solr core
HttpSolrClient solr = new HttpSolrClient.Builder(SOLR_URL + "new_core").withConnectionTimeout(10000)
.withSocketTimeout(60000).build();
solr.add(document);
solr.commit();
solr.close();
}
// 删除Solr中新建立的索引
public void deleteDocumentById() throws Exception { // 选择具体的某一个solr core
HttpSolrClient server = new HttpSolrClient.Builder(SOLR_URL + "new_core").withConnectionTimeout(10000)
.withSocketTimeout(60000).build();
server.deleteById("8"); // 删除所有的索引
// solr.deleteByQuery("*:*");
// 提交修改
server.commit();
server.close();
}
// 查询
public List<String> querySolr(String name) throws Exception {
HttpSolrClient solrServer = new HttpSolrClient.Builder(SOLR_URL + "new_core/").withConnectionTimeout(10000)
.withSocketTimeout(60000).build();
SolrQuery query = new SolrQuery();
List<String> list = new ArrayList<String>();
// 设置查询条件
// query.set("q", "*:*");
// query.set("fl", "title");
query.set("q", "title:" + name + "OR author:" + name);
// 获取查询结果
QueryResponse response = solrServer.query(query);
SolrDocumentList sds = response.getResults();
System.out.println(sds.size());
for (SolrDocument per : sds) {
String artical_id = (String) per.getFieldValue("id");
list.add(artical_id);
}
return list;
}
}
其中查询是经常会用到的一个模块
中间需要注意的地方也比较多,一不小心就会产生异常,下面写点注意事项。
1、在设置查询条件的时候,设置的字段一定是managed-schema 中已经配置好的。
我之前就出现了很大的问题。
在id这里,我数据库里面设置的是article_id,但是这个里面写了
<uniqueKey>id</uniqueKey>
所以出现了异常。如果你和我一样,可以参考之前的总结。
https://blog.csdn.net/weixin_42636552/article/details/85768370
2、获取值的时候,首先要先debug跟踪一下位置和属性,看是不是和自己的想法是一致的,因为在这个地方,Solr为我们直接封装了很多东西,还会涉及到很多的xml配置文件。
五. 项目的发布过程
项目的发布阶段,也是我在Solr的学习阶段遇到最让人摸不着头脑的问题,同样也是最能将学过的东西串联起来的东西。
首先抛出几个问题给大家:
1、tomcat和Solr的端口号不一样,为什么可以启动tomcat,使用8080端口启动Solr?
2、tomcat在安装路径使用startup.bat 直接启动和项目右击启动,有什么不同?
3、tomcat在安装路径使用startup.bat 直接启动,为什么项目找不到?
4、为什么tomcat启动之后,小猫页面和Solr页面都可以出现,但是项目页面不行?
如果对上面这些问题完全知晓,并且项目的访问没有任何人问题,那下面的内容可以不用看了,不然怪没意思的。但是如果中间遇到了什么问题,那还是耽搁阁下几分钟,慢慢往下看,都是我之前遇到的问题,现在写下经验。
解答:tomcat的安装目录下没有任何关于项目的痕迹,所以如果只是单纯的在Tomcat安装路径使用startup.bat 启动,是没有办法识别项目中的结构。如果是在项目中右击RUN 启动服务器,从而启动项目,会因为项目Build path里面的Tomcat配置,项目会被识别并运行。这个时候如果在此使用startup.bat 启动,会报错,端口被占用。不用怀疑,这个时候他们使用的Tomcat和端口是一个,不能同时使用。
如果是初学者,肯定会 和我一样,犯一个错误,右击项目启动Tomcat,Solr功能并没有被实现,直接报404错误。startup.bat启动Tomcat,Solr倒是直接启动了,项目却不行。
解决方案:
将项目打包---->项目名.war,然后放置在Tomcat路径下的webapps底下,如图:
项目打成war包的方式是:
https://blog.csdn.net/tianzongnihao/article/details/79789495
之后再进行访问,所有的页面都可以进行访问了。
切记一点:项目更新之后,记得也要更新这个war
六、在eclipse里面启动tomcat和在本地启动tomcat的区别
当在eclipse中启动tomcat的时候,我们会发现一个问题:
localhost:8080之后的小猫页面出现404
Solrde index.html首页也出现404问题,
只有项目可以被正常执行
输入:http://localhost:8080/ 后显示 404错误,找不到页面,输入 http://localhost:8080/sssss却可以显示内容,为什么服务器tomcat没有启动的情况下,sssss却可以预览呢.
原因是什么呢?
原因是我们刚才在eclipse中设置的Server locations路径为:
Use workspace metadata
其实,你在eclipse中启动的tomcat并部署sssss项目的时候,其实是Eclipse调用了tomcat核心的组件,内置到eclipse中,启动和部署的时候跟真正的tomcat毫无关系.
当你在浏览器中输入http://localhost:8080/ 显示没有启动,但是输入http://localhost:8080/sssss之后,直接进入了eclipse的内置的tomcat,因此能预览。
详情可看:
https://blog.csdn.net/weixin_42636552/article/details/86142493
Good Luck to you
------------------------------------------------END-----------------------------------------