网上资源比较乱、比较杂,稍微总结一下,帮助大家避免像我一样走弯路…………
————————————————————————————————————
首先引入maven依赖:
<!--elasticsearch-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.5.0</version>
</dependency>
公共client:获取ES的client,任何操作都需要此client(类似httpclient吧,发送请求操作):
// 设置集群名称cluster.name:
Settings settings = Settings.builder().put("cluster.name", "betawoo_es").build();
//特别注意,java操作端口为:9300
Client client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("139.116.196.10"), 9300));
提醒:使用完毕记得关闭,调用:
client.close();
1、新建索引
//json字符串,也可以直接传Map
String json = "{\"title\":\"我从windows创建\",\"label\":[\"美式沙发\"],\"create_date\":\"2017-11-1 15:41:01\"}";
IndexResponse response = client.prepareIndex("index_名称", "type_名称").setId("0").setSource(json).execute().actionGet();
// Index name
String _index = response.getIndex();
// Type name
String _type = response.getType();
// Document ID (generated or not)
String _id = response.getId();
// Version
long _version = response.getVersion();
System.out.println("-------:"+_id+"创建成功!");
2、删除索引(根据id删除)
DeleteResponse deleteresponse = client.prepareDelete("index_名称", "type_名称","9db3f12721624f6a888e0c62181ffe8a")
.execute()
.actionGet();
System.out.println(deleteresponse.getVersion());
3、分页搜索
QueryBuilder包路径:import org.elasticsearch.index.query.QueryBuilder;
//搜索匹配内容,等同:curl -X GET http://localhost:9200/test/kind/_search?pretty -d '{"query" : {"match" : {"label" : "映享优选"}}}'
QueryBuilder matchQuery = QueryBuilders.matchQuery("label", "映享优选");
SearchResponse response = client.prepareSearch("portal").setTypes("product")//设置索引和类型
.setQuery(matchQuery).setFrom(0).setSize(60)//设置分页参数(获取1-60条,0开始)类似mysql limit分页
.execute().actionGet();
//获取查询结果集
SearchHits searchHits = response.getHits();
System.out.println("共搜到:"+searchHits.getTotalHits()+"条结果!");
//遍历结果
for(SearchHit hit:searchHits){
System.out.println("String方式打印文档搜索内容:");
System.out.println(hit.getSourceAsString());
// System.out.println(hit.getId());
}