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