使用solrJ对富文本文档建立索引

文章目录

    • 简介
    • 准备工作
    • 配置属性
    • 测试demo
    • 相关参考网址

简介

SolrJ是操作Solr的JAVA客户端,它提供了增加、修改、删除、查询Solr索引的JAVA接口。SolrJ针对Solr提供了Rest 的HTTP接口进行了封装,SolrJ底层是通过使用httpClient中的方法来完成Solr的操作。(solrJ查询数据库)

准备工作

1.安装Mysql 8.0.11,并开放root权限。
具体的参考网址:https://blog.csdn.net/wzy18210825916/article/details/80946454#t2
2.安装solr7.4并新建core,参考:https://blog.csdn.net/diyinqian/article/details/88414343

配置属性

1、在自己创建的core(即你们创建的onlyoffice)/conf目录下创建一个文件data-config.xml,与solrconfig.xml同级。
使用solrJ对富文本文档建立索引_第1张图片
2、solrconfig.xml文件:
上面增加以下这段代码:


       
          data-config.xml
       


在这里插入图片描述
其中里的内容就是我们在上一步创建的data-config.xml文件,将它们关联起来。
3、打开data-config.xml文件,配置相关的数据库属性,即我们要导入那张表的哪些字段,内容如下:



    
    
    
        
        

            
            
            
			
        
    

注意:其中的数据库地址等需要改成自己的,url是你要访问的数据库路径,我这里指定到我的数据库。user是用户名,password是你的数据库密码。query是一个sql语句,你需要导入哪张表的哪些字段,查就行了。然后标签中的column属性是你SQL语句中查询的字段,跟数据库中对应;name属性是你给它起的一个别名,必须指定的,至于name属性是干嘛的,继续往下操作,自然会明白。有多个查询字段就需要有多个标签,每一个标签对应一个字段。

4、打开managed-schema文件,将刚才在data-config.xml中配置的标签添加进来
在这里插入图片描述
就跟配置富文本是一样的(我认为此时不应该再配置有,因为富文本查询的关键字和sql查询的关键字应该是一样的,注意“别名”的时候应该和富文本查询的字段一致)
类似如下添加:
在这里插入图片描述
这里里的name属性值,就是我们刚才在data-config.xml标签的name属性值,这是name属性的第一个用途,关联起来。type类型是你的数据类型,要看你从数据库中查的字段是什么类型,我这里是string字符串。

测试demo

 public class SolrJTest {

	@Test
	public void testInsertIndexByDocument() throws Exception {
		//创建服务器对象    使用SolrJ进行索引的时候,应该使用http://localhost:8080/solr/core2,即无中间的#号。
		HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/new_core");
		//创建文档对象
		SolrInputDocument document = new SolrInputDocument();
		//添加索引数据
		document.addField("id", "1");
		document.addField("name", "sansung爆炸牌手机");
		document.addField("author", 666);
		document.addField("description", "www.boom.png");
		//添加文档
		server.add(document);
		//提交请求,如果ID对应的数据存在则进行更新操作,如果不存在则创建索引
		server.commit();
	}

	/**
	 * 使用注解和JavaBean添加或修改数据
	 * 创建JavaBean,并且用注解标明要添加到索引库的字段,直接通过SolrServer添加JavaBean。
	 * 简单的方法就是在对象类中相应字段添加注释 @Field
	 */
	@Test
	public void testInsertIndexByBean() throws Exception {
		//创建服务器对象
		HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/new_core");
		//添加数据
		server.addBean(new Person("2", "李四", "李四是个好学生"));
		//提交请求,如果ID对应的数据存在则进行更新操作,如果不存在则创建索引
		server.commit();
	}

	/**
	 * 使用SolrJ删除索引库数据
	 * 删除索引可以根据ID删除,也可以写一个查询条件,匹配到条件的都会被删除
	 *
	 * @throws Exception
	 */
	@Test
	public void testDeleteIndex() throws Exception {
		//创建服务器对象
		HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/new_core");
		//根据条件进行删除
		server.deleteByQuery("name:《孙子兵法》");
		//提交请求
		server.commit();
	}


	/**
	 * 使用SolrJ查询索引库数据
	 */

	/**
	 * 以Document形式返回查询结果
	 *
	 * @throws SolrServerException
	 */
	@Test
	public void testQueryIndex() throws SolrServerException {
		//创建服务器对象
		HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/new_core");
		//定义查询条件
		SolrQuery query = new SolrQuery("id:1");
		//进行查询处理
		QueryResponse response = server.query(query);
		SolrDocumentList results = response.getResults();
		int size = results.size();
		System.out.println("共查询到" + size + "条数据");
		//遍历数据
		for (SolrDocument result : results) {
			System.out.println("id: " + result.get("id"));
			System.out.println("author: " + result.get("author"));
		}
	}

	/**
	 * 以JavaBean形式返回查询结果
	 *
	 * @throws SolrServerException
	 */
	@Test
	public void testQueryIndexBean() throws SolrServerException {
		//创建服务器对象
		HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/new_core");
		//定义查询条件
		SolrQuery query = new SolrQuery("id:1");

		//进行查询处理
		QueryResponse queryResponse = server.query(query);
		List personList = queryResponse.getBeans(Person.class);

		//遍历数据
		for (Person person : personList) {
			System.out.println("id: " + person.getId());
			System.out.println("name: " + person.getName());
			System.out.println("desc: " + person.getDesc());
		}
	}

	/**
	 * SolrQuery实现排序
	 *
	 * @throws SolrServerException
	 */
	@Test
	public void testQueryIndexSort() throws SolrServerException {

		//创建服务器对象
		HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/new_core");
		//定义查询条件
		SolrQuery solrQuery = new SolrQuery("*:*");
		//设置按ID查询
		solrQuery.setSort("id", SolrQuery.ORDER.desc);
		//进行查询处理
		QueryResponse queryResponse = server.query(solrQuery);
		SolrDocumentList results = queryResponse.getResults();
		int size = results.size();
		System.out.println("共查找到" + size + "条数据");
		//遍历数据
		for (SolrDocument result : results) {
			System.out.println("id: " + result.get("id"));
			System.out.println("name: " + result.get("name"));
			System.out.println("desc: " + result.get("desc"));
		}

	}

	@Test
	public void testQueryIndexPage() throws SolrServerException {
		//要查询的页数
		int pageNum = 2;
		//每页显示条数
		int pageSize = 1;
		//当前页起始条数
		int start = (pageNum - 1) * pageSize;

		//创建服务器对象
		HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/new_core");
		//定义查询条件
		SolrQuery query = new SolrQuery("*:*");
		//设置按ID排序
		query.setSort("id", SolrQuery.ORDER.asc);
		//设置起始条数
		query.setStart(start);
		//设置每页条数
		query.setRows(pageSize);
		//进行查询处理
		QueryResponse queryResponse = server.query(query);
		SolrDocumentList results = queryResponse.getResults();

		System.out.println("本次共搜索到" + results.size() + "条数据");
		//遍历数据
		for (SolrDocument result : results) {
			System.out.println("id: " + result.get("id"));
			System.out.println("name: " + result.get("name"));
			System.out.println("desc: " + result.get("desc"));
		}
	}

	//	SolrQuery实现高亮显示
	@Test
	public void testQueryIndexHighLighting() throws SolrServerException {
		//创建服务器对象
		HttpSolrServer server = new HttpSolrServer("http://localhost:8080/solr/new_core");
		//定义查询条件
		SolrQuery query = new SolrQuery("id:*");
		//设置高亮标签
		query.setHighlightSimplePre("");
		query.setHighlightSimplePost("");
		//设置高亮字段
		query.addHighlightField("desc");
		//进行查询处理
		QueryResponse queryResponse = server.query(query);
		SolrDocumentList results = queryResponse.getResults();

		//获取高亮字段
		Map>> highlighting = queryResponse.getHighlighting();

		System.out.println("共找到了" + results.size() + "条数据");
		//遍历数据
		for (SolrDocument result : results) {
			System.out.println("id: " + result.get("id"));
			System.out.println("name: " + result.get("name"));
			System.out.println("desc: " + result.get("desc"));
		}

		for (String s : highlighting.keySet()) {
			System.out.println("s" + s);
			Map> stringListMap = highlighting.get(s);
			for (String s1 : stringListMap.keySet()) {
				System.out.println("s1" + s1);
				List stringList = stringListMap.get(s1);
				for (String s2 : stringList) {
					System.out.println("s2" + s2);
				}
			}
		}

	}

相关参考网址

https://wiki.apache.org/solr/Solrj#SolrJ.2FSolr_cross-version_compatibility

你可能感兴趣的:(solr)