springboot对elasticsearch操作首先你要先安装elasticsearch,简单的配置安装很简单这里就不做说明了
因为我使用的springboot是1.59版本elasticsearch版本是6.7.1而1.x版本的springboot貌似不支持elasticsearch6.7.1只支持elasticsearch2.x的版本所以这里采用的是比较复杂的方式用elasticsearch的api而不适用spring提供的spring data api
导入pom文件
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.7.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.7.1</version>
</dependency>
首先是配置文件配置以下参数
elasticsearch.host=你所用的elasticsearch的端口号
elasticsearch.port=默认为9300
elasticsearch.clusterName=你所用的elasticsearch配置的cluster.name
查找你配置的elasticsearch的配置文件如图:
配置连接
@Configuration
public class EsConfig {
@Value("${elasticsearch.host}")
private String host;
@Value("${elasticsearch.port}")
private String port;
@Value("${elasticsearch.clusterName}")
private String clusterName;
@Bean(name = "client")
public TransportClient client() throws UnknownHostException {
Settings settings = Settings.builder().put("cluster.name", clusterName).
put("client.transport.sniff", true)
.build();
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName(host), Integer.parseInt(port)));
return client;
}
}
接下来直接是测试案例,具体看业务需求
@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticsearchApplicationTests {
private Logger logger = LoggerFactory.getLogger(ElasticsearchApplicationTests.class);
// @Resource(name = "client")
// TransportClient client;
@Autowired
TransportClient client;
@Test
public void contextLoads() {
}
public IndicesAdminClient getAdminClient() {
return client.admin().indices();
}
/**
* 判断索引是否存在
*/
public boolean judgeIndexExists(String... indexName) {
IndicesExistsResponse indicesExistsResponse = getAdminClient()
.prepareExists(indexName)
.execute()
.actionGet();
logger.info("indexes 【 {} 】 is exists ? :{}",Arrays.toString(indexName),indicesExistsResponse.isExists());
return indicesExistsResponse.isExists();
}
/**
* 创建索引
*/
@Test
public void createIndex() {
if (judgeIndexExists("mytest")) {
logger.info("索引【mytest】已存在");
return;
}
createEsIndex("mytest", 5, 0);
}
/**
* 创建索引
*
* @param indexName 索引名
* @param shards 数据分片数
* @param replicas 数据备份数
*/
public void createEsIndex(String indexName, Integer shards, Integer replicas) {
/**
* number_of_replicas 是数据备份数,如果只有一台机器,设置为0
* number_of_shards 是数据分片数,默认为5,有时候设置为3
* 注意索引名必须为字母小写【可以使用toLowerCase()方法】
*/
Settings settings = Settings.builder()
.put("index.number_of_shards", shards)
.put("index.number_of_replicas", replicas)
.build();
CreateIndexResponse createIndexResponse = getAdminClient()
.prepareCreate(indexName)
.setSettings(settings)
.execute().actionGet();
logger.info("create index【 {} 】 :{}",indexName ,createIndexResponse.index());
}
/**
* 删除索引
*/
@Test
public void deleteIndex() {
if (!judgeIndexExists("mytest")) {
logger.info("该索引【mytest】已删除");
return;
}
AcknowledgedResponse acknowledgedResponse = getAdminClient()
.prepareDelete("mytest")
.execute()
.actionGet();
logger.info("delete index:{}" , acknowledgedResponse.isAcknowledged());
}
/**
* 添加文档
*/
@Test
public void putDocument() {
try {
XContentBuilder doc = jsonBuilder()
.startObject()
.field("id", "1")
.field("title", "springboot es")
.field("content", "springboot es 的集成")
.field("date", "2019-06-05 17:27:00")
.endObject();
logger.info("insert Doc :{}" , doc.toString());
IndexResponse indexResponse = client.prepareIndex("mytest", "test", "1")
.setSource(doc)
.get();
logger.info("insert status :{}" , indexResponse.status());
logger.info("result :{}" , indexResponse.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 根据索引id查询索引
*/
@Test
public void queryById() {
if (!judgeIndexExists("mytest")) {
logger.info("该索引【mytest】不存在!");
return;
}
GetResponse response = client.prepareGet("mytest", "test", "1").execute().actionGet();
String jsonStr = response.getSourceAsString();
if (Optional.ofNullable(jsonStr).isPresent()) {
logger.info("return query results :{}" , jsonStr);
} else {
logger.info("query is not found!");
}
}
/**
* 查询所有数据
*/
@Test
public void matchAllQuery() {
if (!judgeIndexExists("mytest")) {
logger.info("该索引【mytest】不存在!");
return;
}
QueryBuilder query = QueryBuilders.matchAllQuery();
SearchResponse response = client.prepareSearch("mytest").setQuery(query).execute().actionGet();
for (SearchHit searchHit : response.getHits()) {
String jsonStr = searchHit.getSourceAsString();
logger.info("return query results :{}" , jsonStr);
}
}
}
使用http://elasticsearch所在ip地址:9200/mytest/test/_search查看也可使用elasticsearch head插件与kibana进行查看