pom引入以下依赖
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.8.5</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.8.5</version>
</dependency>
创建ES工具类
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetRequest;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.*;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.metrics.max.Max;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;
/**
* @author wangsheng 下午6:52:53
* @desc elasticsearch的java工具类
*/
public class ElasticsearchTools {
//ES 配置的cluster-name名称
private final static String clustername="wang";
//ES服务器Ip
private final static String ip="192.168.204.133";
//ES配置的transport.tcp.port端口,不是web端口
private final static int port=9302;
/**
*@Title: inert 批量新增记录 注意 下面有个map.get(id) 也就是物理表的id
*@Description: TODO
*@param @param list
*@param @param index
*@param @param type
*@return void
*@throws
*/
public static void insert(List<Map<Object, Object>> list, String index, String type) throws Exception{
try {
Settings settings= Settings.builder().put("cluster.name",clustername).build();
TransportClient client=new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getByName(ip),port));
BulkRequestBuilder bulkRequest = client.prepareBulk();
for (Map<Object, Object> map : list) {
//遍历map所有field,构造插入对象
XContentBuilder xb = XContentFactory.jsonBuilder().startObject();
for (Object key : map.keySet()) {
xb.field((String) key, map.get(key));
}
xb.endObject();
//id尽量为物理表的主键
bulkRequest.add(client.prepareIndex(index, type, map.get("id").toString()).setSource(xb));
}
}
catch (IOException e) {
e.printStackTrace();
}
}
/**
*@Title: getIndex
*@Description: TODO 查询某条信息
*@param @param index 相当于库
*@param @param type 相当于表
*@param @param id 相当于数据
*@param @return
*@return Map<String,Object>
*@throws
*/
public static Map<String, Object> search(String index, String type, String id) {
try {
Settings settings= Settings.builder().put("cluster.name",clustername).build();
TransportClient transportClient=new PreBuiltTransportClient(settings);
transportClient.addTransportAddress(new
TransportAddress(InetAddress.getByName(ip),port));
GetResponse response =transportClient.prepareGet(index, type, id).get();
Map<String, Object> map = response.getSource();
System.out.println(response.getSource());
return map;
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
*@Title: delDocument
*@Description: TODO 删除某条信息
*@param @param index
*@param @param type
*@param @param id
*@return void
*@throws
*/
public static void delete(String index, String type, String id) throws Exception{
Settings settings=Settings.builder().put("cluster.name",clustername).build();
TransportClient client=new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getByName(ip),port));
DeleteResponse deleteResponse = client.prepareDelete(index, type, id).get();
System.out.println(deleteResponse.status());
}
/**
* 更新某条信息 ,如果改动很多,直接用新增的也可以,只要id相同即可
*
*/
public static void update(String index, String type, String id, String key, String value) throws Exception{
Settings settings=Settings.builder().put("cluster.name",clustername).build();
TransportClient client=new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getByName(ip),port));
UpdateRequest updateRequest = new UpdateRequest(index, type, id);
updateRequest.doc(XContentFactory.jsonBuilder().startObject().field(key, value).endObject());
client.update(updateRequest).get();
}
/**
*
* 批量查询 multiGet
* 通过多个id,去查询一个list
*/
public static List<Map<String, Object>> multiGet(String index, String type, String id1, String id2) throws Exception{
try {
Settings settings = Settings.builder().put("cluster.name", clustername).build();
TransportClient client = new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getByName(ip), port));
MultiGetRequest request = new MultiGetRequest();
MultiGetResponse multiGetItemResponses = client.prepareMultiGet().add(index, type, id1, id2).get();
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
for (MultiGetItemResponse itemResponse : multiGetItemResponses) {
GetResponse response = itemResponse.getResponse();
System.out.println(response.getSource());
if (response.isExists()) {
lists.add(response.getSource());
}
}
return lists;
}catch (Exception e)
{
e.printStackTrace();
}
return null;
}
/**
*
* 使用query查询 match_all 查询所有
*/
public static void query(String index) throws Exception{
Settings settings=Settings.builder().put("cluster.name",clustername).build();
TransportClient client=new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getByName(ip),port));
MatchAllQueryBuilder builder= QueryBuilders.matchAllQuery();
SearchRequestBuilder indexx = client.prepareSearch(index)
.setQuery(builder)
.setSize(5);
SearchResponse searchResponse = indexx.get();
SearchHits hits = searchResponse.getHits();
for (SearchHit hit:hits) {
System.out.println(hit.getSourceAsString());
}
}
/**
*
* 使用query查询 match 查询
*/
public static void matchQuery(String indexs,String key,String value) throws Exception{
Settings settings=Settings.builder().put("cluster.name",clustername).build();
TransportClient client=new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getByName(ip),port));
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(key, value);
SearchRequestBuilder index = client.prepareSearch(indexs).setQuery(matchQueryBuilder).setSize(10);
SearchHits hits = index.get().getHits();
for (SearchHit hit:hits
) {
System.out.println(hit.getSourceAsString());
}
}
/**
*
* 使用query查询 mutilMatch 查询
*/
public static void mutilMatchQuery(String indexs,String key1,String key2,String values) throws Exception{
Settings settings=Settings.builder().put("cluster.name",clustername).build();
TransportClient client=new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getByName(ip),port));
MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(values, key1,key2);
SearchRequestBuilder index = client.prepareSearch(indexs).setQuery(multiMatchQueryBuilder).setSize(10);
SearchHits hits = index.get().getHits();
for (SearchHit hit:hits
) {
System.out.println(hit.getSourceAsString());
}
}
/**
*
* 使用query查询 termheterms查询
*/
public static void termsMatchQuery() throws Exception{
Settings settings=Settings.builder().put("cluster.name",clustername).build();
TransportClient client=new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getByName(ip),port));
TermsQueryBuilder termsQueryBuilder = QueryBuilders.termsQuery("title", "周星驰", "影帝");
SearchRequestBuilder index = client.prepareSearch("index3").setQuery(termsQueryBuilder).setSize(10);
SearchHits hits = index.get().getHits();
for (SearchHit hit:hits
) {
System.out.println(hit.getSourceAsString());
}
}
/**
*
* 使用query查询 范围 通配符 前缀 模糊查询
*/
public static void query1(String value) throws Exception{
Settings settings=Settings.builder().put("cluster.name",clustername).build();
TransportClient client=new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getByName(ip),port));
//范围查询
//QueryBuilder queryBuilder = QueryBuilders.rangeQuery("classify").from("1").to("40");
//通配符查询 * 零个或多个
QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("name",value+"*");
//前缀查询
// QueryBuilder queryBuilder = QueryBuilders.prefixQuery("author","周");
//模糊查询 查询类型的
// QueryBuilder queryBuilder = QueryBuilders.fuzzyQuery("id","aac");
//id查询
// QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1","2","4");
SearchRequestBuilder index = client.prepareSearch("index3").setQuery(queryBuilder).setSize(10);
SearchHits hits = index.get().getHits();
for (SearchHit hit:hits
) {
System.out.println(hit.getSourceAsString());
}
}
/**
*
* 聚合查询
*/
public static void aggregation(String index) throws Exception{
Settings settings=Settings.builder().put("cluster.name",clustername).build();
TransportClient client=new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getByName(ip),port));
AggregationBuilder aggregationBuilder= AggregationBuilders.max("max").field("id");
SearchResponse index3 = client.prepareSearch(index).addAggregation(aggregationBuilder).get();
Max max = index3.getAggregations().get("max");
System.out.println(max.getValue());
}
/**
*
* queryString
*/
@Test
public void queryString() throws Exception{
Settings settings=Settings.builder().put("cluster.name",clustername).build();
TransportClient client=new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getByName(ip),port));
// + 代表必须有 -代表没有
QueryBuilder queryBuilder=QueryBuilders.queryStringQuery("+周星驰 -sss");
SearchRequestBuilder index3 = client.prepareSearch("index3")
.setQuery(queryBuilder)
.setSize(10);
SearchResponse searchResponse = index3.get();
for (SearchHit hit:searchResponse.getHits()) {
System.out.println(hit.getSourceAsString());
}
}
/**
*
* 组合查询
*/
@Test
public void boolQuery() throws Exception{
Settings settings=Settings.builder().put("cluster.name",clustername).build();
TransportClient client=new PreBuiltTransportClient(settings);
client.addTransportAddress(new TransportAddress(InetAddress.getByName(ip),port));
QueryBuilder queryBuilder=QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("author","周星驰"))
.mustNot(QueryBuilders.matchQuery("title","梁朝伟"))
.should(QueryBuilders.matchQuery("title","影帝"))
.filter(QueryBuilders.rangeQuery("id").gte("1"));
SearchRequestBuilder index3 = client.prepareSearch("index3")
.setQuery(queryBuilder)
.setSize(10);
SearchResponse searchResponse = index3.get();
for (SearchHit hit:searchResponse.getHits()) {
System.out.println(hit.getSourceAsString());
}
}
}
测试
//添加测试
@Test
public void insert() throws Exception {
List lists=new ArrayList();
Map<Object,Object> map=new HashMap<>();
map.put("id","1");
map.put("name","汪胜");
map.put("age","25");
map.put("sex","男");
lists.add(map);
insert(lists,"china","user");
}
//查询测试
@Test
public void get()
{
search("china","user","1");
}
//删除测试
@Test
public void del() throws Exception {
delete("china","user","1");
}
//更新测试
@Test
public void upda() throws Exception {
update("china","user","1","age","25");
}
//批量查询
@Test
public void multiGets()throws Exception {
multiGet("china","user","1","2");
}
//使用query查询 match_all 查询所有
@Test
public void querys() throws Exception {
query("china");
}
/**
*
* 使用query查询 match 查询
*/
@Test
public void matchQuerys() throws Exception {
matchQuery("china","name","汪胜");
}
/**
*
* 使用query查询 mutilMatch 查询
*/
@Test
public void mutilMatchQuerys () throws Exception {
mutilMatchQuery("china","age","name","汪胜");
}
/**
*
* 使用query查询 范围 通配符 前缀 模糊查询
*/
@Test
public void querys1() throws Exception {
query1("汪");
}