使用solrj进行简单的增删改查操作

废话不多说!直接开撸!


所需jar包:

<dependencies>
		<!-- solr客户端 -->
		<dependency>
			<groupId>org.apache.solr</groupId>
			<artifactId>solr-solrj</artifactId>
			<version>4.10.3</version>
		</dependency>
		
		<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
        <!-- Jackson Json处理工具包 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.4.2</version>
        </dependency>
	</dependencies>

 下面的增删改查操作之前都执行的该部分代码:

@Before
	public void  inint() {
		solrServer = new HttpSolrServer("http://192.168.80.3:8080/solr");
	}

增加:

/**
	 * 测试增加
	 * @throws Exception
	 */
	@Test
	public void tetsAdd() throws Exception{
		SolrInputDocument document = new SolrInputDocument();
		document.setField("id","6");
		document.setField("title", "我是solrj客户端的测试");
		solrServer.add(document);
		solrServer.commit();
	}

 更新:

/**
	 * 更新就是删除相同的唯一标识符后再次添加需要更新的内容即可!
	 * @throws Exception
	 */
	@Test
	public void TestUpdate() throws Exception{
		SolrInputDocument document = new SolrInputDocument();
		document.setField("id","6");
		document.setField("title", "我是测试更新的!");
		solrServer.add(document);
		solrServer.commit();
	}

删除:

/**
	 * 测试删除
	 * @throws Exception
	 */
	@Test
	public void TestDelete() throws Exception{
		UpdateResponse deleteById = solrServer.deleteById("1");
		solrServer.commit();
		System.out.println(deleteById);
	}

查询:

/**
	 * 测试查询
	 */
	@Test
	public void TestQuery() throws Exception{
		//得到查询对象
		SolrQuery params = new SolrQuery();
		
		//设置查询条件
		params.set("q", "title:第二次");
		//设置过滤条件
		params.set("fq","id:2");
//		params.set("fq","price:[* to 10]");
		//设置排序
		params.setSort("id",ORDER.asc);
		//设置每次查询多少条
		params.setStart(0);
		params.setRows(10);
		//设置显示要求的属性结果(结果只有title属性的值)
//		params.set("fl","title");
		//设置默认查询的属性
		params.set("df","id");
		
		/**
		 * 设置高亮:
		 * 		1)打开高亮
		 * 		2)设置需要高亮的属性
		 * 		3)设置高亮属性的前缀(html的格式)
		 * 		4)设置高亮属性的后缀(html的格式)
		 */
		params.setHighlight(true);
		params.addHighlightField("title");
		params.setHighlightSimplePre("<h1 style='color=red'>");
		params.setHighlightSimplePost("</h1>");
		
		
		/**
		 * 执行查询(就是solr页面查询结果中的数据)
		 * 有responseHeader和response
		 *  result  ->>>>> {responseHeader={status=0,QTime=1,params={wt=javabin,version=2}},response={numFound=0,start=0,docs=[]}}
		 */
		QueryResponse result = solrServer.query(params);
		
		//得到查询结果(response)->>>>> {numFound=0,start=0,docs=[]}
		//就是solr页面查询结果中的数据(其中相关属性这里都可以得到)
		SolrDocumentList documents = result.getResults();
		System.out.println(documents.getNumFound());
		System.out.println(documents.getStart());
		
		//得到高亮的集合(高亮的集合是单独的和网页的一样)
		Map<String, Map<String, List<String>>> highlighting = result.getHighlighting();
		//第一个map K是id value是map
		//第二个map K是域   list是值
		
		//遍历得到的每一个查询结果的document
		for (SolrDocument solrDocument : documents) {
			
			Map<String, List<String>> map = highlighting.get(solrDocument.get("id"));
			List<String> list = map.get("title");
			for (String str : list) {
				System.out.println("我是高亮的: "+str);
			}
			
			
			System.out.println(solrDocument.get("id"));
			System.out.println(solrDocument.get("title"));
		}
	}

 因为最重要的也是最有用的就是查询:上面的代码结果对应solr的客户端查询就是如下图:

猜你喜欢

转载自blog.csdn.net/qq_38263083/article/details/84345124