°æȨÉùÃ÷£º±¾ÎÄΪ²©Ö÷Ô´´ÎÄÕ£¬×ªÔØÇë×¢Ã÷³ö´¦¡£ https://blog.csdn.net/qq_18860653/article/details/78730548
ÔÚÉÏһƪËÑË÷ѧϰ¨CSolrÈ«ÎÄËÑË÷·þÎñÆ÷µÄ»ù±¾Ê¹Óã¨Ò»£©¡ª¡ªSolrJµÄʹÓÃÖУ¬ÎÒÊÇÖ±½ÓʹÓõÄSolrJÀ´µ÷ÓÃSolr·þÎñÆ÷µÄ£¬¶ø¶ÔÓÚÊìϤSpring DataϵÁеÄͬѧһ¶¨¸üÏ£ÍûÓÃÕâÖֹ淶µÄ·½Ê½È¥²Ù×÷Ëü¡£Spring DataÊÇÖ§³ÖSolrµÄ£¬Ö»ÐèÒª¼òµ¥µÄÅäÖã¬ÎÒÃǼ´¿ÉÏñ²Ù×÷Êý¾Ý¿âÒ»Ñù²Ù×÷Ëü¡£
ÒÀÀµ
<properties>
<spring-version>4.2.3.RELEASE</spring-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
<version>1.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
SpringÅäÖÃ spring-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:context="http://www.springframework.org/schema/context"
xmlns:solr="http://www.springframework.org/schema/data/solr"
xsi:schemaLocation="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 http://www.springframework.org/schema/data/solr http://www.springframework.org/schema/data/solr/spring-solr.xsd">
<solr:solr-server id="solrServer" url="http://127.0.0.1:8983/solr/blog" timeout="5000" maxConnections="10"></solr:solr-server>
<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate" scope="singleton">
<constructor-arg ref="solrServer"/>
</bean>
<solr:repositories base-package="top.yuyufeng.learn.lucene.solr"/>
</beans>
BlogCore.java
package top.yuyufeng.learn.lucene.solr;
/**
* @author yuyufeng
* @date 2017/12/6
*/
import org.springframework.data.annotation.Id;
import org.springframework.data.solr.core.mapping.Indexed;
import org.springframework.data.solr.core.mapping.SolrDocument;
import java.util.Date;
/**
* @author yuyufeng
*/
@SolrDocument(solrCoreName = "blog")
public class BlogCore {
@Id
@Indexed
public Long blogId;
@Indexed
public String blogTitle;
@Indexed
public String blogContent;
@Indexed
public Date createTime;
@Indexed
public String keywords;
public Long getBlogId() {
return blogId;
}
public void setBlogId(Long blogId) {
this.blogId = blogId;
}
public String getBlogTitle() {
return blogTitle;
}
public void setBlogTitle(String blogTitle) {
this.blogTitle = blogTitle;
}
public String getBlogContent() {
return blogContent;
}
public void setBlogContent(String blogContent) {
this.blogContent = blogContent;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getKeywords() {
return keywords;
}
public void setKeywords(String keywords) {
this.keywords = keywords;
}
@Override
public String toString() {
return "BlogCore{" +
"blogId=" + blogId +
", blogTitle='" + blogTitle + '\'' +
", blogContent='" + blogContent + '\'' +
", createTime=" + createTime +
", keywords='" + keywords + '\'' +
'}';
}
}
BlogCoreRepository.java
package top.yuyufeng.learn.lucene.solr;
/**
* @author yuyufeng
* @date 2017/12/6
*/
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.solr.core.query.result.HighlightPage;
import org.springframework.data.solr.repository.Highlight;
import org.springframework.data.solr.repository.Query;
import org.springframework.data.solr.repository.SolrCrudRepository;
/**
* @author yuyufeng
*/
public interface BlogCoreRepository extends SolrCrudRepository<BlogCore, Long> {
/**
* ËÑË÷ËùÓÐ //(value = "*:*", filters = {"title±±¾©ÊÐ"})
* @param page
* @return
*/
@Override
@Query(value = "*:*")
Page<BlogCore> findAll(Pageable page);
/**
* ͨ¹ý¹Ø¼ü´ÊËÑË÷
* @param keywords
* @param page
* @return
*/
@Highlight(prefix = "<B>", postfix = "</B>")
HighlightPage<BlogCore> findByKeywords(String keywords, Pageable page);
}
²âÊÔʹÓÃ
package top.yuyufeng.learn.lucene.solr;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.solr.core.query.result.HighlightEntry;
import org.springframework.data.solr.core.query.result.HighlightPage;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author yuyufeng
* @date 2017/12/6
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring-solr.xml"})
public class BlogCoreTest {
@Autowired
private BlogCoreRepository blogCoreRepository;
@Test
public void testFindByKeywords() {
Pageable pageable = new PageRequest(0, 10);
HighlightPage<BlogCore> highlightPage = blogCoreRepository.findByKeywords("´ïĦԺ", pageable);
for (int i = 0; i < highlightPage.getHighlighted().size(); i++) {
BlogCore blogCore = highlightPage.getHighlighted().get(i).getEntity();
for (HighlightEntry.Highlight highlight : highlightPage.getHighlighted().get(i).getHighlights()) {
if ("blogTitle".equals(highlight.getField().getName())) {
blogCore.setBlogTitle(highlight.getSnipplets().get(0));
} else if ("blogContent".equals(highlight.getField().getName())) {
blogCore.setBlogContent(highlight.getSnipplets().get(0));
}
}
System.out.println(blogCore);
}
}
}
ÔËÐнá¹û£º
BlogCore{blogId=2, blogTitle=¡¯´ïĦԺ³¬Ô½Òµ½çÁúÍ·¡¯, blogContent=¡¯´ïĦԺһ¶¨Ò²±ØÐëÒª³¬Ô½Ó¢Ìضû£¬±ØÐ볬Խ΢Èí£¬±ØÐ볬ԽIBM£¬ÒòΪÎÒÃÇÉúÓÚ¶þʮһÊÀ¼Í£¬ÎÒÃÇÊÇÓлú»áºó·¢ÓÅÊƵġ£¡¯, createTime=Wed Dec 06 13:38:12 CST 2017, keywords=¡¯null¡¯}
BlogCore{blogId=1, blogTitle=¡¯ÂíÔƱí´ïÔ¸¾°¡¯, blogContent=¡¯10ÔÂ11ÈÕº¼ÖÝÔÆÆÜ´ó»áÉÏ£¬ÂíÔƱí´ïÁ˶Ôн¨³ÉµÄ°¢Àï°Í°ÍÈ«ÇòÑо¿Ôº¡ª°¢Àï°Í°Í´ïĦԺµÄÔ¸¾°£¬Ï£Íû´ïĦԺ¶þÊ®ÄêÄÚ³ÉΪÊÀ½çµÚÒ»´ó¾¼ÃÌ壬·þÎñÊÀ½ç¶þÊ®ÒÚÈË£¬´´ÔìÒ»ÒÚ¸ö¹¤×÷¸Úλ¡£¡¯, createTime=Wed Dec 06 12:03:56 CST 2017, keywords=¡¯null¡¯}
±¸×¢
֮ǰÒѾ½¨Á¢Ë÷Òý£¬ÕâÀï¾ÍÖ±½ÓËÑË÷keywordsÁË