怎么在java项目中直接使用Solr

版权声明:https://me.csdn.net/weixin_42636552 https://blog.csdn.net/weixin_42636552/article/details/86065381

最近在用java写一个网站,想要在里面做一个搜索引擎,选用的技术是现在比较常见的Solr

如果你是初学者,我想,这篇分享博客肯定会有帮助。

它的使用宏观上分为下面一步:

  1. 进行环境配置
  2. 增加新域【域就像数据库里面的一个表,用来管理索引和相关配置。】
  3. 添加中文分词器
  4. java与Solr的结合【solrJ
  5. 项目的发布过程【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
如图5 和图6所示:
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-----------------------------------------

猜你喜欢

转载自blog.csdn.net/weixin_42636552/article/details/86065381
今日推荐