SpringBoot整合ElasticSearch-全文搜索

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangminemail/article/details/82943888

1、何为全文搜索?

全文搜索本质:非结构化数据转成结构化数据,提取非结构化数据

概念:

原理:

实现技术:

其中lucene是搜索引擎,ElasticSearch和solr是基于Lucene

2、添加依赖

// 添加spring data Elasticsearch依赖
	compile('org.springframework.boot:spring-boot-starter-data-elasticsearch')
	// 添加JNA的依赖
	compile('net.java.dev.jna:jna:4.3.0')

3、配置文件

#Elasticsearch服务地址
spring.data.elasticsearch.cluster-nodes=localhost:9300
#设置连接超时时间
spring.data.elasticsearch.properties.transport.tcp.connect_timeout=120s

4、通过JPA实现代码编程

import java.io.Serializable;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

/**
 * 
 * @author Administrator
 *
 */
@Document(indexName="blog", type="blog") // 文档
public class EsBlog implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	private String id;
	
	private String title;
	
	private String summary;
	
	private String content;

	protected EsBlog(){ // JPA规范要求,防止直接使用
		
	}
	
	public EsBlog(String title, String summary, String content){
		this.title = title;
		this.summary = summary;
		this.content = content;
	}
	
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getSummary() {
		return summary;
	}

	public void setSummary(String summary) {
		this.summary = summary;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}
	
	
	@Override
	public String toString(){
		return String.format("EsBlog[id='%s', title='%s', summary='%s', content='%s']", id, title,summary,content);
	}

XXRepository.java

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import com.example.demo.domain.es.EsBlog;

public interface EsBlogRepository extends ElasticsearchRepository<EsBlog, String> {

	/**
	 * 分页查询博客
	 * @param title
	 * @param summary
	 * @param content
	 * @return Page<EsBlog>
	 */
	Page<EsBlog> findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(String title, String summary, String content, Pageable pageable);
	
	
}

测试类:

/**
 * 测试
 * @author Administrator
 *
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class EsBlogRepositoryTest {
	
	@Autowired
	private EsBlogRepository esBlogRepository;

	@Before
	public void init(){
		esBlogRepository.deleteAll();
		
		EsBlog esBlog1 = new EsBlog("登黄雀楼", "王之涣的登黄雀楼", "zemel to world!");
		EsBlog esBlog2 = new EsBlog("相思", "王维的相思", "welcome to es wendy!");
		EsBlog esBlog3 = new EsBlog("静夜思", "李白的静夜思", "welcome to es mary!");
		esBlogRepository.save(esBlog1);
		esBlogRepository.save(esBlog2);
		esBlogRepository.save(esBlog3);
	}
	
	@Test
	public void testFindDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining() {
		Pageable pageable = new PageRequest(0, 20);
		String title = "zemel";
		String summary = "";
		String content = "";
		
		Page<EsBlog>  page =esBlogRepository.findDistinctEsBlogByTitleContainingOrSummaryContainingOrContentContaining(title, summary, content, pageable);
		
		for(EsBlog blog:page.getContent()){
			System.out.println(blog);
		}
		Assert.assertNotNull(page);
		System.out.println("page.getTotalElements()--"+page.getTotalElements());
		Assert.assertEquals(3, page.getTotalElements());
	}

}

5、下载ElasticSearch

下载地址:https://www.elastic.co/cn/downloads/elasticsearch

解压启动之后,进入bin目录启动elasticsearch.bat,启动项目工程可用

猜你喜欢

转载自blog.csdn.net/zhangminemail/article/details/82943888
今日推荐