springboot+solr测试

在solr中遇到的坑 记录一下

solr下载地址 https://lucene.apache.org/solr/mirrors-solr-latest-redir.html

首先我是在阿里云部署的solr
这个位置随便放 我是放在了user/路径下
安装方法
传送门
https://blog.csdn.net/rzhzhz/article/details/11966763
之后就是配置域 这里面域分很多种大家可以看下面的文章
https://blog.csdn.net/weixin_41113108/article/details/79911736
现在开始言归正传

先来测试代码在这里插入代码片
//首先注入依赖
@Autowired
private SolrTemplate solrTemplate;

/**
 * 添加 添加的时候要提交事务
 */
@Test
public void addOne(){
	TbItem item = new TbItem();
	item.setId(1L);
	item.setBrand("华为");
	item.setCategory("手机");
	item.setGoodsId(1L);
	item.setSeller("华为2号专卖店");
	item.setTitle("华为Mate9");
	item.setPrice(new BigDecimal(2000));
	solrTemplate.saveBean(item);
	solrTemplate.commit();
}

实体类
这里一定要注意id 忘记了id就会出很多问题 其他的只要和配置域差不多就好了
@Field
private Long id;
@Field(“item_title”)
private String title;

private String sellPoint;

@Field("item_price")
private BigDecimal price;

private Integer stockCount;

private Integer num;

private String barcode;

@Field("item_image")
private String image;

private Long categoryid;

private String status;

private Date createTime;

private Date updateTime;

private String itemSn;

private BigDecimal costPirce;

private BigDecimal marketPrice;

private String isDefault;


private Long goodsId;

private String sellerId;

private String cartThumbnail;

@Field("item_category")
private String category;

@Field("item_brand")
private String brand;

private String spec;

@Field("item_seller")
private String seller;

接下来配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:solr="http://www.springframework.org/schema/data/solr"
       xsi:schemaLocation="http://www.springframework.org/schema/data/solr
  		http://www.springframework.org/schema/data/solr/spring-solr-1.0.xsd
		http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- solr服务器地址 -->
    <solr:solr-server id="solrServer" url="http://39.97.106.252:8080/solr" />
    <!-- solr模板,使用solr模板可对索引库进行CRUD的操作 -->
    <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
        <constructor-arg ref="solrServer" />
    </bean>
</beans>

里面的solr地址写自己的地址就好
id和后面测试的要保持一致哦
还要一定要记住大小写
别因为这些小问题导致报错
下面是测试的所有代码 crud 模糊查询 分页都有

package com.itcast.controller;

import com.itcast.pojo.Shop;
import com.itcast.pojo.TbItem;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.core.query.Criteria;
import org.springframework.data.solr.core.query.Query;
import org.springframework.data.solr.core.query.SimpleQuery;
import org.springframework.data.solr.core.query.result.ScoredPage;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import static org.junit.Assert.*;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext-solr.xml")
public class SolrControllerTest {


	@Autowired
	private SolrTemplate solrTemplate;

	/**
	 * 添加 添加的时候要提交事务
	 */
	@Test
	public void addOne(){
		TbItem item = new TbItem();
		item.setId(1L);
		item.setBrand("华为");
		item.setCategory("手机");
		item.setGoodsId(1L);
		item.setSeller("华为2号专卖店");
		item.setTitle("华为Mate9");
		item.setPrice(new BigDecimal(2000));
		solrTemplate.saveBean(item);
		solrTemplate.commit();
	}

	@Test
	public void add(){
		Shop shop = new Shop();
		shop.setSid(99l);
		shop.setSname("444");
		shop.setPrice("华为");
		shop.setSnum("手机");
		solrTemplate.saveBean(shop);
		solrTemplate.commit();
	}



	/**
	 * 根据id查询
	 */
	@Test
	public void searchOne(){
		TbItem tbItem = solrTemplate.getById(1L,TbItem.class);
		System.out.println("从solr中获取到的id为1的品牌为:"+tbItem.getBrand());
	}


	/**
	 * 删除
	 */
	@Test
	public void deleteOne(){
		solrTemplate.deleteById("1");
		solrTemplate.commit();
	}


	/**
	 * 循环插入100条数据
	 */
	@Test
 	public void testList(){
		ArrayList<TbItem> list = new ArrayList<TbItem>();
		for (int i=0;i<=100;i++){
			TbItem tbItem = new TbItem();
			tbItem.setId(i+1L);
			tbItem.setBrand("华为");
			tbItem.setCategory("手机");
			tbItem.setGoodsId(1L);
			tbItem.setSeller("华为2号专卖店");
			tbItem.setTitle("华为Mate"+i);
			tbItem.setPrice(new BigDecimal(2000+i));
			list.add(tbItem);
		}
		solrTemplate.saveBeans(list);
		solrTemplate.commit();

	}

	/**
	 * 分页
	 */
	@Test
	public void testPageList(){
		SimpleQuery query = new SimpleQuery("*:*");
		query.setOffset(20);
		query.setRows(20);
		ScoredPage<TbItem> tbItems = solrTemplate.queryForPage(query, TbItem.class);
		System.out.printf("总记录数"+tbItems.getTotalElements());
		List<TbItem> content = tbItems.getContent();
		showList(content);
	}

	private void showList(List<TbItem> list){
		for(TbItem item:list){
			System.out.println(item.getTitle() +item.getPrice());
		}

	}

	/**
	 * 条件查询
	 */
	@Test
	public void testPageQueryMutil(){
		Query query=new SimpleQuery("*:*");
		Criteria criteria=new Criteria("item_title").contains("2");
		criteria=criteria.and("item_title").contains("5");
		query.addCriteria(criteria);
		//query.setOffset(20);//开始索引(默认0)
		//query.setRows(20);//每页记录数(默认10)
		ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
		System.out.println("总记录数:"+page.getTotalElements());
		List<TbItem> list = page.getContent();
		showList(list);
	}

	/**
	 * 删除全部元素
	 */
	@Test
	public void testDeleteAll(){
		Query query=new SimpleQuery("*:*");
		solrTemplate.delete(query);
		solrTemplate.commit();
	}

}

当然了 最主要的pom文件也少不了

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.1717a.demo</groupId>
    <artifactId>springdatasolrdemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-solr</artifactId>
            <version>1.5.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
        </dependency>

    </dependencies>
</project>

好了 基本上这个测试代码就完事了
接下来简单的看一下效果
在这里插入图片描述

这里面 q是查询 其他的有一些什么显示多少数据啦什么的 这里不啰嗦了
好了 到了最关键的时候了
下面是重点大家要仔细看

  1. 配置solr的时候在solrhom的时候路径一定要看好 不要写错
  2. 在配置域的时候类型一定要一致
  3. id是唯一的 当然也可以改 一般都是在solrhoem的配置文件250多行左右
  4. 在存数据的时候 一定要记好 如果是数据库的话 最好用对象的方式存取 不要直接吧集合放进去
  5. 如果是springboot项目 一定要看好版本问题
  6. 有两种api 大家要看好
  7. 一般的错误都是id没有唯一 或者是域和字段有差异
    还有一点 tomcat版本和solr版本也要注意要不然指不定会出一些什么样的问题 差不多目前就能想到这些了 有什么问题 欢迎大家在下面留言交流哈

|

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值