您的位置:首页 > 编程语言 > Java开发

spring-data-solr 入门配置

2016-12-28 16:06 405 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  solr data-solr 编辑器