spring-data-solr 入门配置

来源:互联网 发布:房地产网络推广怎么做 编辑:程序博客网 时间:2024/05/23 05:10

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;@SolrDocumentpublic 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;@Repositorypublic 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 0