5 在springboot中使用ElasticsearchTemplate 操作ElasticSearch(本机和远程服务器)

来源:互联网 发布:日本娱乐圈的黑暗知乎 编辑:程序博客网 时间:2024/05/21 14:49

第三篇和第四篇分别介绍了ElasticSearch的http请求命令和对java api的封装。像封装好的ES java api可以使用于普通的java项目里,来简化一些原生的命令。
springboot作为一个集成了N多功能的框架,自然不需要我们自己来封装工具类,它直接提供了ElasticsearchTemplate,和RedisTemplate一样是一个封装好的模板,当然你觉得ElasticsearchTemplate不好用的话,也可以去用自己的工具类。
现在用简单的例子来看看在本机和在远程服务器分别使用ElasticsearchTemplate进行数据操作。

一:使用本机的ElasticSearch

application.yml还是使用第一节时的yml文件

spring:   data:        elasticsearch:            #cluster-name: #默认为elasticsearch            #cluster-nodes: 112.74.72.18:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode            properties:                path:                  logs: ./elasticsearch/log #elasticsearch日志存储目录                  data: ./elasticsearch/data #elasticsearch数据存储目录

来看一下cluster-nodes,这里如果直接注释掉,不配置nodes,那么默认就是本机!如果要使用远程服务器,或者局域网服务器,那就需要在这里配置IP:PORT。
可以配置多个,以逗号分隔,相当于集群。cluster-name如果想改为其他,那就需要在安装ElasticSearch时编辑配置文件,设置name。
配置好yml后,就可以直接使用template了,嗯,就是这么简单!
我们在Test类里,可以直接这么写:

@Autowired    ElasticsearchTemplate elasticsearchTemplate;

就可以使用elasticsearchTemplate了。
在第一篇时我们已经插入了两条数据了,下面就直接查询:

@Test    public void test() {        SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(queryStringQuery("spring boot OR 书籍")).build();        List<Article> articles = elasticsearchTemplate.queryForList(searchQuery, Article.class);        for (Article article : articles) {            System.out.println(article.toString());        }    }

运行就看到查询结果了,template里方法很多,各种各样的操作,就需要自己慢慢研究了。
为什么Template直接就能用了呢,其实类似于这样:

import org.elasticsearch.client.Client;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;/** * Created by wuwf on 17/6/2. */@Configurationpublic class ElasticSearchConfig {    @Bean    public ElasticsearchTemplate elasticsearchTemplate(Client client) {        return new ElasticsearchTemplate(client);    }}

client参数就是yml里配置的信息,springboot会自动赋给Client,然后传给template。不过上面这段代码如果不写,系统也会自动做好赋值。
像前面说的,如果不想用template,而想使用自己的Util工具类,譬如ElasticSearchUtil,就可以在上面的代码中用该类替换ElasticTemplate,这样就可以到处autowired你自己的util工具类了。

二:使用远程服务器

以阿里云CentOS7为例,安装ElasticSearch。
先安装好jdk8,并配置环境变量,这个就不提了。
安装ElasticSearch,使用如下命令:
下载rpm包:
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.4/elasticsearch-2.3.4.rpm
安装
rpm -ivh elasticsearch-2.3.4.rpm
安装后先不要启动,我们做个配置
进入etc/elasticsearch,用vi编辑elasticsearch.yml。可以看到里面有cluster.name的地方,如果要做集群,那么集群内所有的cluster.name应该一致。我们找到network.host行,把注释放开,把后面的ip改为0.0.0.0,然后再把http.port那行的注释也放开即可。目的是为了在外网能访问到这台服务器公网IP的ElasticSearch服务。
启动服务service elasticsearch start
然后就可以在自己电脑用浏览器访问服务器ip:9200,就会看到一串欢迎语json的输出了。

配置好远程服务器后,在springboot里,也是修改yml文件,把cluster-nodes的注释放开,填上服务器的ip和端口即可。在项目里就能使用远程服务器的ElasticSearch服务了。
安装参考:http://www.jianshu.com/p/527a474bb6eb
https://www.biaodianfu.com/centos-7-install-elasticsearch.html

三:安装head插件,管理Elasticsearch

这里写图片描述
这个就是Head插件,在里面可以查看各个节点,index数据等,相当于一个数据库管理页面。
安装方法是:
/usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
注意路径和配置yml的路径是不一样的,yml是在etc/elasticsearch里。
安装好后,访问ip:9200/_plugin/head/ 就能看到上面的界面了。

关于ElasticsearchTemplate的更多使用方法、复杂查询、条件查询,我还需要慢慢摸索一下,回头总结一下。

阅读全文
1 0