1.Spring Data Solr入门
1.1 Spring Data Solr简介
虽然支持任何编程语言的能力具有很大的市场价值,你可能感兴趣的问题是:我如何将Solr的应用集成到Spring中?可以,Spring Data Solr就是为了方便Solr的开发所研制的一个框架,其底层是对SolrJ(官方API)的封装。
1.2 Spring Data Solr入门小Demo
1.2.1 搭建工程
(1)创建maven工程,pom.xml中引入依赖
<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>
(2)在src/main/resources下创建 applicationContext_solr.xml
<?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://127.0.0.1:8080/solr" /> <!-- solr模板,使用solr模板可对索引库进行CRUD的操作 --> <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate"> <constructor-arg ref="solrServer" /> </bean> </beans>
2.2.2 @Field 注解
创建 com.offcn.pojo 包,将优乐选的TbItem实体类拷入本工程 ,属性使用@Field注解标识 。 如果属性与配置文件定义的域名称不一致,需要在注解中指定域名称。
import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; import org.apache.solr.client.solrj.beans.Field; public class TbItem implements Serializable{ @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; @Field("item_goodsid") 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; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title == null ? null : title.trim(); } public String getSellPoint() { return sellPoint; } public void setSellPoint(String sellPoint) { this.sellPoint = sellPoint == null ? null : sellPoint.trim(); } public BigDecimal getPrice() { return price; } public void setPrice(BigDecimal price) { this.price = price; } public Integer getStockCount() { return stockCount; } public void setStockCount(Integer stockCount) { this.stockCount = stockCount; } public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getBarcode() { return barcode; } public void setBarcode(String barcode) { this.barcode = barcode == null ? null : barcode.trim(); } public String getImage() { return image; } public void setImage(String image) { this.image = image == null ? null : image.trim(); } public Long getCategoryid() { return categoryid; } public void setCategoryid(Long categoryid) { this.categoryid = categoryid; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status == null ? null : status.trim(); } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } public String getItemSn() { return itemSn; } public void setItemSn(String itemSn) { this.itemSn = itemSn == null ? null : itemSn.trim(); } public BigDecimal getCostPirce() { return costPirce; } public void setCostPirce(BigDecimal costPirce) { this.costPirce = costPirce; } public BigDecimal getMarketPrice() { return marketPrice; } public void setMarketPrice(BigDecimal marketPrice) { this.marketPrice = marketPrice; } public String getIsDefault() { return isDefault; } public void setIsDefault(String isDefault) { this.isDefault = isDefault == null ? null : isDefault.trim(); } public Long getGoodsId() { return goodsId; } public void setGoodsId(Long goodsId) { this.goodsId = goodsId; } public String getSellerId() { return sellerId; } public void setSellerId(String sellerId) { this.sellerId = sellerId == null ? null : sellerId.trim(); } public String getCartThumbnail() { return cartThumbnail; } public void setCartThumbnail(String cartThumbnail) { this.cartThumbnail = cartThumbnail == null ? null : cartThumbnail.trim(); } public String getCategory() { return category; } public void setCategory(String category) { this.category = category == null ? null : category.trim(); } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand == null ? null : brand.trim(); } public String getSpec() { return spec; } public void setSpec(String spec) { this.spec = spec == null ? null : spec.trim(); } public String getSeller() { return seller; } public void setSeller(String seller) { this.seller = seller == null ? null : seller.trim(); } }
2.2.3 对solr的各种操作
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:applicationContext_solr.xml") public class SolrTest { @Autowired private SolrTemplate solrTemplate; /*添加*/ @Test public void testAdd(){ Item item = new Item(); item.setId(1L); item.setBrand("华为"); item.setCategory("手机"); item.setGoodsId(1L); item.setSeller("华为2号专卖店"); item.setTitle("华为mate30Pro"); item.setPrice(new BigDecimal(6999)); solrTemplate.saveBean(item); solrTemplate.commit(); } /*根据id查找*/ @Test public void testFindById(){ Item item = solrTemplate.getById(1, Item.class); System.out.println(item); } /*删除*/ @Test public void testDelete(){ solrTemplate.deleteById("1"); solrTemplate.commit(); } /*分页添加*/ @Test public void testAddList(){ List<Item> items = new ArrayList<>(); for (int i=0;i<100;i++){ Item item = new Item(); item.setId(i+1L); item.setBrand("华为"); item.setCategory("手机"); item.setGoodsId(1L); item.setSeller("华为2号专卖店"); item.setTitle("华为mate30Pro"); item.setPrice(new BigDecimal(6999.00)); items.add(item); } solrTemplate.saveBeans(items); solrTemplate.commit(); } /*分页查询*/ @Test public void testPageQuery(){ Query query = new SimpleQuery("*:*"); query.setOffset(20); //开始索引(默认为0) query.setRows(10); //每页记录数(默认10) ScoredPage<Item> page = solrTemplate.queryForPage(query, Item.class); System.out.println("总页数"+ page.getTotalPages()); System.out.println("总记录数"+ page.getTotalElements()); List<Item> items = page.getContent(); for (Item item : items) { System.out.println(item.getId()+ " " + item.getTitle()+" "+item.getPrice()); } } /*条件查询*/ @Test public void testQuery(){ SimpleQuery query = new SimpleQuery("*:*"); Criteria criteria = new Criteria("item_title").contains("3"); criteria.and("item_title").contains("5"); query.addCriteria(criteria); ScoredPage<Item> page = solrTemplate.queryForPage(query, Item.class); System.out.println("总页数"+ page.getTotalPages()); System.out.println("总记录数"+ page.getTotalElements()); List<Item> items = page.getContent(); for (Item item : items) { System.out.println(item.getId()+ " " + item.getTitle()+" "+item.getPrice()); } } /*删除全部数据*/ @Test public void testDeleteAll(){ SimpleQuery query = new SimpleQuery("*:*"); solrTemplate.delete(query); solrTemplate.commit(); } }