springboot版本:1.5.9 elasticsearch版本:5.6.1 jdk:1.8
pom.xml添加elasticsearch依賴
<properties>
<log4j-api.version>2.8.2</log4j-api.version>
<log4j-core.version>2.8.2</log4j-core.version>
<elasticsearch.version>5.6.1</elasticsearch.version>
<transport.version>5.6.1</transport.version>
</properties><dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j-api.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j-core.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>${transport.version}</version>
</dependency>
</dependencies>application.properties添加elasticsearch配置
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300添加elasticsearch配置文件ElasticsearchConfiguration
package com.example.demo.config;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* @Author 馮戰魁
* @Date 2018/3/13 下午5:55
*/
@Configuration
public class ElasticsearchConfiguration implements FactoryBean<TransportClient>, InitializingBean, DisposableBean {
private static final Logger logger = LoggerFactory.getLogger(ElasticsearchConfiguration.class);
@Value("${spring.data.elasticsearch.cluster-nodes}")
private String clusterNodes ;
@Value("${spring.data.elasticsearch.cluster-name}")
private String clusterName;
private TransportClient client;
@Override
public void destroy() throws Exception {
try {
logger.info("Closing elasticSearch client");
if (client != null) {
client.close();
}
} catch (final Exception e) {
logger.error("Error closing ElasticSearch client: ", e);
}
}
@Override
public TransportClient getObject() throws Exception {
return client;
}
@Override
public Class<TransportClient> getObjectType() {
return TransportClient.class;
}
@Override
public boolean isSingleton() {
return false;
}
@Override
public void afterPropertiesSet() throws Exception {
buildClient();
}
protected void buildClient() {
try {
PreBuiltTransportClient preBuiltTransportClient = new PreBuiltTransportClient(settings());
if (!"".equals(clusterNodes)){
for (String nodes:clusterNodes.split(",")) {
String InetSocket [] = nodes.split(":");
String Address = InetSocket[0];
Integer port = Integer.valueOf(InetSocket[1]);
preBuiltTransportClient.addTransportAddress(new
InetSocketTransportAddress(InetAddress.getByName(Address),port ));
}
client = preBuiltTransportClient;
}
} catch (UnknownHostException e) {
logger.error(e.getMessage());
}
}
/**
* 初始化默認的client
*/
private Settings settings(){
Settings settings = Settings.builder()
.put("cluster.name",clusterName)
.put("client.transport.sniff",true)
.build();
client = new PreBuiltTransportClient(settings);
return settings;
}
}添加測試接口,本例的Index是information,type是article
package com.example.demo.controller;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author 馮戰魁
* @Date 2018/3/9 下午12:13
*/
@RestController
@RequestMapping("/es")
public class ElasticsearchController {
@Autowired
private TransportClient client;
// 獲取單條記錄
@RequestMapping("/get")
public GetResponse hello(){
GetResponse response = client.prepareGet("information", "article", "1").get();
return response;
}
// 插入數據
@RequestMapping("/save")
public String save(){
Map map = new HashMap<String,Object>();
map.put("id","2");
map.put("name","hehe");
map.put("age",18);
IndexResponse response = client.prepareIndex("information", "article",map.get("id").toString())
.setSource(map).execute().actionGet();
return response.getId();
}
// 查詢搜索
@RequestMapping("/search")
public List<String> search(){
SearchResponse response = client.prepareSearch("information")
.setTypes("article")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
// .setQuery(QueryBuilders.termQuery("name", "feng")) // Query
.setPostFilter(QueryBuilders.rangeQuery("age").from(0).to(188)) // Filter
.setFrom(0).setSize(60).setExplain(true)
.get();
// SearchResponse response =client.prepareSearch().execute().actionGet();
SearchHits searchHits = response.getHits();
System.err.println("總數:"+searchHits.getTotalHits());
List<String> data = new ArrayList<String>();
SearchHit[] hits = searchHits.getHits();
for (SearchHit hit : hits) {
String json = hit.getSourceAsString();
data.add(json);
System.err.println(json);
}
return data;
}
}啓動elasticsearch和springboot,訪問測試接口
springboot連接elasticsearch
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.