1 springboot整合elasticsearch入门例子
来源:互联网 发布:office 2017 mac 破解 编辑:程序博客网 时间:2024/06/02 02:10
记录一下最入门的例子。
一:安装elasticsearch。
在mac上很简单,brew install elasticsearch。安装完成后启动,brew services start ElasticSearch就可以了。然后访问http://localhost:9200/,出现一个json串的界面就OK了。9200是http的端口,9300是给java用户的端口。
如果是linux,看看这篇http://blog.csdn.net/cwenao/article/details/54943505,包括修改cluster.name和network.host的作用。如果不修改cluster.name那么系统是有默认的值,在第三步设置application.yml时可以看到。如果是配置远程elasticsearch集群,则设置cluster.nodes为远程的地址。
这里我们什么都不改,默认就是本机。
二:新建spring boot的elasticsearch项目。
用idea新建,勾选web和nosql里的elasticsearch选项,等待创建完成即可。
起初我用spring boot1.5.3创建的,运行时死活报一个类找不到,后改用最新的2.0.0创建的就好了。
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>testelasticaearch</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>testelasticaearch</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.M1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>3.0.9</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories></project>
除了net.java.dev.jna那个是新加的,别的都是项目勾选elasticsearch后自动创建的,新加的这个依赖是因为启动后也是报类不存在,后来在网上找个jna依赖加上后就好了。
三:配置yml文件。
spring: data: elasticsearch: #cluster-name: #默认为elasticsearch #cluster-nodes: 127.0.0.1: #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode properties: path: logs: ./elasticsearch/log #elasticsearch日志存储目录 data: ./elasticsearch/data #elasticsearch数据存储目录
四:创建javaBean文件。
我直接用http://www.tianshouzhi.com/api/tutorials/springboot/101这篇文章里的类。
把Author类和Tutorial类复制过来,还有Article类。简单说一下Article类。
package com.example.demo.pojo;import org.springframework.data.elasticsearch.annotations.Document;import java.io.Serializable;import java.util.Date;/** * Created by admin on 17/6/1. */@Document(indexName="projectname",type="article",indexStoreType="fs",shards=5,replicas=1,refreshInterval="-1")public class Article implements Serializable { @Id private Long id; /**标题*/ private String title; /**摘要*/ private String abstracts; /**内容*/ private String content; /**发表时间*/ private Date postTime; /**点击率*/ private Long clickCount; /**作者*/ private Author author; /**所属教程*/ private Tutorial tutorial; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAbstracts() { return abstracts; } public void setAbstracts(String abstracts) { this.abstracts = abstracts; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Date getPostTime() { return postTime; } public void setPostTime(Date postTime) { this.postTime = postTime; } public Long getClickCount() { return clickCount; } public void setClickCount(Long clickCount) { this.clickCount = clickCount; } public Author getAuthor() { return author; } public void setAuthor(Author author) { this.author = author; } public Tutorial getTutorial() { return tutorial; } public void setTutorial(Tutorial tutorial) { this.tutorial = tutorial; } @Override public String toString() { return "Article{" + "id=" + id + ", title='" + title + '\'' + ", abstracts='" + abstracts + '\'' + ", content='" + content + '\'' + ", postTime=" + postTime + ", clickCount=" + clickCount + ", author=" + author + ", tutorial=" + tutorial + '}'; }}
@Document注解里面的几个属性,类比mysql的话是这样:
index –> DB
type –> Table
Document –> row
@Id注解加上后,在Elasticsearch里相应于该列就是主键了,在查询时就可以直接用主键查询,后面一篇会讲到。其实和mysql非常类似,基本就是一个数据库。
@Persistent@Inherited@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE})public @interface Document {String indexName();//索引库的名称,个人建议以项目的名称命名String type() default "";//类型,个人建议以实体的名称命名short shards() default 5;//默认分区数short replicas() default 1;//每个分区默认的备份数String refreshInterval() default "1s";//刷新间隔String indexStoreType() default "fs";//索引文件存储类型}
加上了@Document注解之后,默认情况下这个实体中所有的属性都会被建立索引、并且分词。
我们通过@Field注解来进行详细的指定,如果没有特殊需求,那么只需要添加@Document即可。
@Field注解的定义如下:@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)@Documented@Inheritedpublic @interface Field {FieldType type() default FieldType.Auto;#自动检测属性的类型FieldIndex index() default FieldIndex.analyzed;#默认情况下分词DateFormat format() default DateFormat.none;String pattern() default "";boolean store() default false;#默认情况下不存储原文String searchAnalyzer() default "";#指定字段搜索时使用的分词器String indexAnalyzer() default "";#指定字段建立索引时指定的分词器String[] ignoreFields() default {};#如果某个字段需要被忽略boolean includeInParent() default false;}
五:dao和controller
Dao:
public interface ArticleSearchRepository extends ElasticsearchRepository<Article, Long> {}
controller:
package com.example.demo;import com.example.demo.pojo.Article;import com.example.demo.pojo.Author;import com.example.demo.pojo.Tutorial;import com.example.demo.repository.ArticleSearchRepository;import org.elasticsearch.index.query.QueryStringQueryBuilder;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.Date;import java.util.Iterator;/** * Created by admin on 17/6/1. */@RestControllerpublic class TestController { @Autowired private ArticleSearchRepository articleSearchRepository; @RequestMapping("/add") public void testSaveArticleIndex() { Author author = new Author(); author.setId(1L); author.setName("tianshouzhi"); author.setRemark("java developer"); Tutorial tutorial = new Tutorial(); tutorial.setId(1L); tutorial.setName("elastic search"); Article article = new Article(); article.setId(1L); article.setTitle("springboot integreate elasticsearch"); article.setAbstracts("springboot integreate elasticsearch is very easy"); article.setTutorial(tutorial); article.setAuthor(author); article.setContent("elasticsearch based on lucene," + "spring-data-elastichsearch based on elaticsearch" + ",this tutorial tell you how to integrete springboot with spring-data-elasticsearch"); article.setPostTime(new Date()); article.setClickCount(1L); articleSearchRepository.save(article); } @RequestMapping("/query") public void testSearch() { String queryString = "springboot";//搜索关键字 QueryStringQueryBuilder builder = new QueryStringQueryBuilder(queryString); Iterable<Article> searchResult = articleSearchRepository.search(builder); Iterator<Article> iterator = searchResult.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } }}
启动项目,先执行add,往elasticsearch添加一条数据,然后再访问query即可看到结果了。
其实非常类似于普通的DB查询,还支持很多条件查询,findAll,findTop之类的,就是JPA那一套可以直接用,因为继承的ElasticsearchRepository本身就是一个PagingAndSortingRepository。
参考:http://www.cnblogs.com/softidea/p/6102796.html
- 1 springboot整合elasticsearch入门例子
- SpringBoot整合ElasticSearch
- ElasticSearch整合springboot实战
- 入门整合案例(SpringBoot+Spring-data-elasticsearch) ---- (指定分词器)
- 5.1 入门整合案例(SpringBoot+Spring-data-elasticsearch) ---- good
- SpringBoot整合MyBatis例子
- springboot+mybatis整合(入门)
- SpringBoot 入门例子
- springboot学习(1)springboot介绍及入门例子
- SpringBoot入门之整合mybatis
- dubbo整合springboot入门案例
- springboot入门 整合ssm框架
- SpringBoot入门-快速整合Mybatis
- springboot整合mybatis最简单的例子
- springboot学习(6)springboot整合Mybatis例子
- springboot学习(6)springboot整合Mybatis例子
- SpringBoot 整合 SpringData 入门案例(一)
- spring整合Redis 入门例子
- call,apply,bind,new的模拟实现
- js中的自增和自减
- 后缀数组总结
- 自定义View之圆形水波扩散动效
- iOS UI学习之路06
- 1 springboot整合elasticsearch入门例子
- OPENGL—中点Bresenham画直线
- MySQL主从复制(七)
- 快速排序
- kotlin汇总8-其他1
- vs2015使用外部工具改变行尾CRLF->LF
- gp5.0.0源码安装部署3节点
- Maven_Spring_Mybatis 实例
- http://blog.csdn.net/lmj623565791/article/details/72667669