版权声明:本文为博主原创文章,未经博主允许不得转载。 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,启动项目工程可用