java + elasticsearch

来源:互联网 发布:数据库三级是工程师吗 编辑:程序博客网 时间:2024/05/19 23:57

1.创建Client对象(connection)

private static final Logger LOG = LoggerFactory.getLogger(EsUtils.class);public static final String CLUSTER_NAME = "application_1"; // 实例名称private static final String IP1 = "192.168.0.74"; private static final String IP2 = "192.168.0.75"; private static final String IP3 = "192.168.0.76";private static final int PORT = 9300; // 端口private static Settings settings = Settings.settingsBuilder().put("cluster.name", CLUSTER_NAME).put("client.transport.sniff", false).build();private static TransportClient client;static {try {LOG.info("get client");client = TransportClient.builder().settings(settings).build().addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(IP1), PORT)) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(IP2), PORT)) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(IP3), PORT));} catch (UnknownHostException e) {e.printStackTrace();}}// 取得实例public static synchronized TransportClient getTransportClient() {return client;} 

2.创建索引库

public static void createIndex(Client client) {//client.admin().indices().prepareCreate("hyn_es_data").execute().actionGet();client.admin().indices().prepareCreate("hyn_es_data1").execute().actionGet();client.close();}

3.创建索引类型

public static void createIndexType(Client client) {try {XContentBuilder mapping = XContentFactory.jsonBuilder().startObject()  .startObject("data")    .startObject("properties")      .startObject("cn_name").field("type","string").field("index", "not_analyzed").endObject()      .startObject("job_content").field("type","string").field("analyzer", "ik").field("search_analyzer", "ik").endObject()      .startObject("department").field("type","string").field("index", "not_analyzed").endObject()      .startObject("mailnickname").field("type","string").field("index", "not_analyzed").endObject()      .startObject("start_time").field("type","string").field("index", "not_analyzed").endObject()      .startObject("end_time").field("type","string").field("index", "not_analyzed").endObject()      .startObject("type").field("type","string").field("index", "not_analyzed").endObject()    .endObject()  .endObject().endObject();PutMappingRequest mappingRequest = Requests.putMappingRequest("hyn_es_data1").type("data").source(mapping);client.admin().indices().putMapping(mappingRequest).actionGet();} catch (IOException e) {e.printStackTrace();}}

4.向索引类型插入数据

public static void insertIndexTypeData(Client client,String type) {List<IndexWorkContent> work = null;try {work = JdbcHiveDao.hiveData(type);} catch (ClassNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}int count = 0;if(work.size()==0){Log.info(type+"没有数据");}else{BulkRequestBuilder bulkRequest = client.prepareBulk();for (IndexWorkContent wk : work) {try {XContentBuilder xContentBuilder = XContentFactory.jsonBuilder().startObject().field("mailnickname", wk.getMailnickname()).field("cn_name", wk.getCn_name()).field("type", wk.getType()).field("job_content", wk.getJob_content()).field("start_time", wk.getStart_time()).field("end_time",wk.getEnd_time()).field("department",wk.getDept()).endObject();bulkRequest.add(client.prepareIndex("hyn_es_data1", "data").setSource(xContentBuilder));if (count % 1000 == 0) {bulkRequest.execute().actionGet();LOG.info(type+"成功建立1000     总数为:"+count);}count++;// IndexResponse response = client.prepareIndex("hyn_es_data",// "wifi").setSource(xContentBuilder)// .execute().actionGet();LOG.info(type+"插入数据量为:"+count);} catch (IOException e) {e.printStackTrace();}}bulkRequest.execute().actionGet();}}
5.删除所有索引

public static void deleteAllIndex(Client client) {ClusterStateResponse response = client.admin().cluster().prepareState().execute().actionGet();String[] indexs = response.getState().getMetaData().getConcreteAllIndices();for (String index : indexs) {System.out.println(index + " delete");//// 清空所有索引。DeleteIndexResponse deleteIndexResponse = client.admin().indices().prepareDelete(index).execute().actionGet();System.out.println(deleteIndexResponse.getHeaders());}}

6.检索

public static void queryData(String index, String type, IkWordData ik, Client client) {List<IndexSearchData> abc = new ArrayList<IndexSearchData>();System.out.println(ik.toString());BoolQueryBuilder qb = new BoolQueryBuilder() .must(QueryBuilders.matchQuery("cn_name", ik.getEmployee_name())) .must(QueryBuilders.matchQuery("mailnickname", ik.getEmployee_account())) .must(QueryBuilders.matchPhraseQuery("job_content", ik.getIk_word()).slop(1)); //.must(QueryBuilders.matchPhraseQuery("start_time",ik.getStart_time()));SearchResponse response = client.prepareSearch(index).setSearchType(SearchType.QUERY_THEN_FETCH).setTypes(type).setFrom(0).setQuery(qb).execute().actionGet();SearchHits hits = response.getHits(); System.out.println("查询到记录数:" + hits.getTotalHits());SearchHit[] searchHists = hits.getHits();List<IndexSearchData> list = new ArrayList<IndexSearchData>();for (SearchHit sh : searchHists) {IndexSearchData isd = new IndexSearchData();isd.setIkword(ik.getIk_word());isd.setMailnickname(sh.getSource().get("mailnickname").toString());isd.setCn_name(sh.getSource().get("cn_name").toString());isd.setType(sh.getSource().get("type").toString());isd.setJob_content(sh.getSource().get("job_content").toString());isd.setStart_time(sh.getSource().get("start_time").toString());list.add(isd);}List<String> listTemp = new ArrayList<String>();for (IndexSearchData i : list) {listTemp.add(i.getMailnickname() + "," + i.getCn_name() + "," + i.getIkword() +  "," + i.getJob_content() + "," + i.getType() + "," + i.getStart_time());}// 去重Iterator<String> it = listTemp.iterator();List<String> s = new ArrayList<String>();while (it.hasNext()) {String a = it.next();if (s.contains(a)) {it.remove();} else {s.add(a);}}        System.out.println(s.size());for (String i : s) {String[] a = i.split(",");IndexSearchData isd = new IndexSearchData();isd.setMailnickname(a[0]);isd.setCn_name(a[1]);isd.setIkword(a[2]);//isd.setIkwordcount(Integer.parseInt(a[3]));isd.setJob_content(a[3]);isd.setType(a[4]);isd.setStart_time(a[5]);JdbcMysql.save(isd);}}



0 0