spring-data-solr 入门配置

spring-data-solr 入门配置

spring4+spring-data-solr2.6.x 整合代码

pom.xml

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

    <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-core</artifactId>
        <version>6.3.0</version>
    </dependency>

application-solr.xml

    <solr:repositories base-package="com.*"/>
    <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
        <constructor-arg index="0" ref="solrClientFactory"/>
    </bean>
    <bean id="solrClientFactory" class="org.springframework.data.solr.server.support.HttpSolrClientFactoryBean">
        <property name="url" value="http://localhost:8983/solr/jcg"/>
        <property name="timeout" value="15000"/>
        <property name="maxConnections" value="100"/>
    </bean>

    <bean id="simpleSolrRepository"  class="org.springframework.data.solr.repository.support.SimpleSolrRepository">
        <property name="solrOperations" ref="solrTemplate"></property>
    </bean>

Book.java

package com.solr;

import org.apache.solr.client.solrj.beans.Field;
import org.springframework.data.solr.core.mapping.SolrDocument;

@SolrDocument
public class Book implements java.io.Serializable{

    private static final long serialVersionUID = 8066442791230445208L;

    @Field
    private String id;
    @Field
    private String cat ;
    @Field
    private String name ;
    @Field
    private String price ;
    @Field
    private String inStock ;
    @Field
    private String author ;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getCat() {
        return cat;
    }
    public void setCat(String cat) {
        this.cat = cat;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPrice() {
        return price;
    }
    public void setPrice(String price) {
        this.price = price;
    }
    public String getInStock() {
        return inStock;
    }
    public void setInStock(String inStock) {
        this.inStock = inStock;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    @Override
    public String toString() {
        return  this.getName() + " \t\t " + this.getAuthor();
    }

}

BookTest.java Junit Test

package com.xintian.weixin;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.stream.IntStream;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringRunner;
import com.solr.Book;
import com.solr.BookRepositoryImpl;

@RunWith(SpringRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class BookTest extends AbstractJUnit4SpringContextTests {

    @Autowired
    private BookRepositoryImpl bookRepository;

    @Test
    public void addBook() { 
        List<Book> bks = new ArrayList<>();
        IntStream.range(1, 50).forEach( n->{
            Book bk = new Book();
            bk.setId(UUID.randomUUID().toString().replace("-", ""));
            bk.setName("穷爸爸富爸爸 "+n);
            bk.setAuthor("李佳朋");
            bk.setPrice(""+n);
            bk.setInStock("true");
            bk.setCat("成功学");
            bks.add(bk);
        });
        bookRepository.save(bks);
//      Predicate predicate = new Predicate(key, value);
//      bookRepository.getSolrOperations().execute(new SolrCallback<Object>() {
//          @Override
//          public Object doInSolr(SolrClient solrClient) throws SolrServerException, IOException {
//              solrClient.query(params);
//              return null;
//          }
//      
//      });
    }

    @Test
    public void deleteBook() { 
        bookRepository.delete(bookRepository.findAll());
    }

    @Test
    public void update() { 
        Iterable<Book> allBook = bookRepository.findAll();
        List<Book> udBook =new ArrayList<Book>();
        allBook.forEach(b -> {
            b.setCat("小说集");
            udBook.add(b);
        });
        bookRepository.save(udBook);
    }

    @Test
    public void getBookOrderBy() { 
        List<Order> orders = new ArrayList<>();
        orders.add(new Sort.Order(Direction.DESC, "price"));
        Sort sort = new Sort(orders);
        bookRepository.findAll(sort).forEach(b -> {
            System.out.println(b);
        });;
    }

    @Test
    public void getPageBook() { 
        Sort sort = new Sort(Direction.DESC, "price");
        bookRepository.findAll(sort).forEach(b -> {
            System.out.println(b);
        });;

        System.out.println("\r\n");
        Pageable pageable = new PageRequest(2,10,sort); 
        bookRepository.findAll(pageable).forEach(b -> {
            System.out.println(b);
        });;
    }


    @Test
    public void findOne() { 
        Book o = bookRepository.findOne("ca2c6b74acb74654a9e08e4d984808ac");
        System.out.println(o);
    }



    @Test
    public void queryBook() { 
        List<Book> list = bookRepository.queryBookByName("");
//      Query query = new SimpleQuery();
//      Criteria criteria = new Criteria("name");
//      criteria.contains("爸爸");
//      query.addCriteria(criteria);
//      Object o =bookRepository.getSolrOperations().queryForObject(query, Book.class);
//      System.out.println(o);
    }
}

BookRepository.java

package com.solr;

import java.util.List;

public interface BookRepository  {

    public List<Book> findByAvailable(Boolean available);
}

BookRepositoryImpl.java

package com.solr;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.repository.Query;
import org.springframework.data.solr.repository.support.SimpleSolrRepository;
import org.springframework.stereotype.Repository;


@Repository
public class BookRepositoryImpl extends SimpleSolrRepository<Book, String> implements BookRepository  {

    @Autowired
    private SolrTemplate solrTemplate;

    @Autowired
    public void setSolrOperations(){
        super.setSolrOperations(solrTemplate);
    }

    @Query("inStock:?false")
    public List<Book> queryBookByName(String string) {

        return null;
    }

    @Override
    public List<Book> findByAvailable(Boolean available) {
        return null;
    }


}

没有实现类也是可以查询的

package com.solr;

import java.util.List;

import org.springframework.data.repository.Repository;


/**
 * 没有实现类也是可以查询的
 *  去看看 TestBookNoImpl.test()
 *  
 */
public interface BookInterfaceRepository extends Repository<Book, String> {
      List<Book> findByName(String name);

}

TestBookNoImpl.java

package com.xintian.weixin;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringRunner;

import com.solr.Book;
import com.solr.BookInterfaceRepository;

@RunWith(SpringRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class TestBookNoImpl extends AbstractJUnit4SpringContextTests {

    @Autowired
    private BookInterfaceRepository productRepository;

    @Test
    public void test(){
        List<Book> books = productRepository.findByName("爸爸");
        System.out.println(books.size());
        books.forEach( book -> {
            System.out.println(book);
        });
    }
}

查询是按方法名称命名

这里写图片描述

http://note.youdao.com/noteshare?id=82069fd1ce143285ae17ae2fd5f0e09c

继续研究中

jiaplee@qq.com

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值