package com.logapi.monitor.common.util; import com.logapi.monitor.common.pojo.PageParam; import com.mongodb.BasicDBObject; import com.mongodb.MongoClient; import com.mongodb.client.*; import com.mongodb.client.model.Sorts; import com.sun.org.apache.bcel.internal.generic.NEW; import org.bson.Document; import org.bson.conversions.Bson; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.convert.MongoConverter; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @Component public class MongoUtil { @Autowired private MongoClient mongoClient; @Autowired private MongoConverter mongoConverter; /** * 獲取database * * @return * @paramdbName */ public MongoDatabase getDB(String dbName) { if (dbName != null && !"".equals(dbName)) { MongoDatabase database = mongoClient.getDatabase(dbName); return database; } return null; } /** * @author: ganchao * @description: 單條數據插入 * @date: 2019/9/2 8:43 * @param: [dbName, collectionName, document] * @return: void */ public void insert(String dbName, String collectionName,Document document){ MongoCollection<Document> collection = getDB(dbName).getCollection(collectionName); collection.insertOne(document); } /** * @author: ganchao * @description: list數據插入 * @date: 2019/9/2 8:43 * @param: [dbName, collectionName, documents] * @return: void */ public void insertList(String dbName, String collectionName,List<Document> documents){ MongoCollection<Document> collection = getDB(dbName).getCollection(collectionName); collection.insertMany(documents); } /** * @author: ganchao * @description: 刪除單條數據 * @date: 2019/9/2 8:49 * @param: [dbName, collectionName, basicDBObject] * @return: void */ public void deleteOne(String dbName, String collectionName,Bson basicDBObject){ MongoCollection<Document> collection = getDB(dbName).getCollection(collectionName); //collection.findOneAndDelete(basicDBObject); //刪除一條 collection.deleteOne(basicDBObject); } /** * @author: ganchao * @description: 刪除多條數據 * @date: 2019/9/2 8:50 * @param: [dbName, collectionName, basicDBObject] * @return: void */ public void deleteMany(String dbName, String collectionName,Bson basicDBObject){ MongoCollection<Document> collection = getDB(dbName).getCollection(collectionName); collection.deleteMany(basicDBObject); } /** * @author: ganchao * @description: 更新單條數據 * @date: 2019/9/2 8:50 * @param: [dbName, collectionName, query, updateObject] * @return: void */ public void update(String dbName, String collectionName,BasicDBObject query,Bson updateObject){ MongoCollection<Document> collection = getDB(dbName).getCollection(collectionName); //更新一條數據 collection.updateOne(query,updateObject); } /** * @author: ganchao * @description: 更新多條數據 * @date: 2019/9/2 8:50 * @param: [dbName, collectionName, query, updateObject] * @return: void */ public void updateMany(String dbName, String collectionName,BasicDBObject query,Bson updateObject){ MongoCollection<Document> collection = getDB(dbName).getCollection(collectionName); //更新多條數據 collection.updateMany(query, updateObject); } /** * 條件查詢記錄數量 * * @return * @paramcollection * @paramfilter */ public Long count(String dbName, String collectionName, BasicDBObject query) { Long count = 0L; if (query == null) { query = new BasicDBObject(); } if (null == collectionName || "".equals(collectionName)) { return null; } if (null == dbName || "".equals(dbName)) { return null; } MongoDatabase database = getDB(dbName); if (database != null) { MongoCollection<Document> collection = database.getCollection(collectionName); try { //構建查詢條件 count = collection.count(query); } finally { } } else { return null; } return count; } /** * 條件查詢 * * @return * @paramcollection * @paramfilter */ public <T> List<T> find(String dbName, String collectionName, Class<T> clazz, BasicDBObject query, Bson sort, PageParam page, String[] fields) { if (query == null) { query = new BasicDBObject(); } List<T> list = new ArrayList<T>(); MongoCursor<Document> cursor = null; if (null == collectionName || "".equals(collectionName)) { return null; } if (null == dbName || "".equals(dbName)) { return null; } MongoDatabase database = getDB(dbName); if (database != null) { MongoCollection<Document> collection = database.getCollection(collectionName); try { //構建查詢條件 FindIterable<Document> iterable = collection.find(query); iterable = addField(iterable,fields); iterable = addSort(iterable,sort); iterable = addPageInfo(iterable,page); cursor = iterable.iterator(); while (cursor.hasNext()) { Document document = cursor.next(); T t = mongoConverter.read(clazz, document); list.add(t); } } finally { if (cursor != null) { cursor.close(); } } } else { return null; } return list; } private FindIterable<Document> addField(FindIterable<Document> document, String[] fields) { if (fields == null || fields.length <= 0) { return document; } BasicDBObject basicDBObject = new BasicDBObject(); for (String field : fields) { basicDBObject.append(field, 1); } return document.projection(basicDBObject); } private FindIterable<Document> addSort(FindIterable<Document> document, Bson orderBy) { if (orderBy == null) { return document; } return document.sort(orderBy); } private FindIterable<Document> addPageInfo(FindIterable<Document> document, PageParam page) { if (page == null) { return document; } return document.skip((page.getPageNo() - 1) * page.getPageSize()).limit(page.getPageSize()); } /* public MongoCursor<Document> findByPage(MongoCollection<Document> collection, Bson filter, int pageNo, int pageSize) { Bson orderBy = new BasicDBObject("_id", 1); Bson times = Sorts.orderBy(Sorts.descending("times")); return collection.find(filter).sort(orderBy).skip((pageNo - 1) * pageSize).limit(pageSize).iterator(); }*/ public void createIndex(String dbName, String collectionName,Bson bson) { MongoDatabase database = getDB(dbName); MongoCollection<Document> collection = database.getCollection(collectionName); collection.createIndex(bson); } public List<Document> listIndex(String dbName, String collectionName) { List<Document> list = new ArrayList<Document>() { }; MongoDatabase database = getDB(dbName); MongoCollection<Document> collection = database.getCollection(collectionName); ListIndexesIterable<Document> documents = collection.listIndexes(); MongoCursor<Document> iterator = documents.iterator(); while (iterator.hasNext()) { Document document = iterator.next(); list.add(document); } return list; } }
package com.logapi.monitor.common.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.databind.ObjectMapper; import com.logapi.monitor.api.hbankcurrenttrade.pojo.document.LogInfo; import com.logapi.monitor.common.pojo.EsPage; import com.logapi.monitor.common.pojo.PageESResult; import com.logapi.monitor.common.pojo.PageResult; import com.logapi.monitor.common.pojo.SortingField; import org.apache.commons.lang.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.ParseException; import org.apache.http.entity.ContentType; import org.apache.http.nio.entity.NStringEntity; import org.apache.http.util.EntityUtils; import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; import org.elasticsearch.action.admin.indices.create.CreateIndexResponse; import org.elasticsearch.action.admin.indices.get.GetIndexRequest; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.Response; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.text.Text; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.common.xcontent.json.JsonXContent; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.sort.SortOrder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.*; import java.util.concurrent.TimeUnit; /** * @Title: ElasticsearchUtil * @Description: 工具類 */ public class ElasticSearchRestClientUtil { private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchRestClientUtil.class); // @Resource(name = "restHighLevelClient") // private RestHighLevelClient restHighLevelClient; //private static RestHighLevelClient client; private static String shards = "6"; private static String replicas = "1"; private static ObjectMapper mapper = new ObjectMapper(); /** * 創建索引 * * @return */ /* public static boolean createIndex(RestHighLevelClient client,String index) { //index名必須全小寫,否則報錯 CreateIndexRequest request = new CreateIndexRequest(index); try { CreateIndexResponse indexResponse = client.indices().create(request,RequestOptions.DEFAULT); if (indexResponse.isAcknowledged()) { LOGGER.info("創建索引成功"); } else { LOGGER.info("創建索引失敗"); } return indexResponse.isAcknowledged(); } catch (IOException e) { e.printStackTrace(); } return false; }*/ public static boolean createIndex(RestHighLevelClient client,String indexName, String type, XContentBuilder builders) { if (indexExists(client,indexName)) { return true; } try { CreateIndexRequest index = new CreateIndexRequest(indexName); XContentBuilder builder = JsonXContent.contentBuilder(); builder.startObject() .startObject("settings") .field("number_of_shards", Integer.parseInt(shards)) .field("number_of_replicas", Integer.parseInt(replicas)) .endObject() .endObject(); index.source(builder).mapping(type, builders); CreateIndexResponse response = client.indices().create(index, RequestOptions.DEFAULT); return true; } catch (IOException e) { e.printStackTrace(); return false; } } /** * 查詢索引是否存在 */ public static boolean indexExists(RestHighLevelClient client,String indexName) { GetIndexRequest request = new GetIndexRequest(); request.indices(indexName); try { return client.indices().exists(request, RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); return false; } } /** * 插入數據 * * @param index * @param type * @param object * @return */ public static String addData(RestHighLevelClient client,String index, String type, String id, JSONObject object) { IndexRequest indexRequest = new IndexRequest(index, type, id); try { indexRequest.source(mapper.writeValueAsString(object), XContentType.JSON); IndexResponse indexResponse = client.index(indexRequest,RequestOptions.DEFAULT); return indexResponse.getId(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 檢查索引 * * @param index * @return * @throws IOException */ public static boolean checkIndexExist(RestHighLevelClient client,String index) { GetIndexRequest request = new GetIndexRequest(); request.indices(index); try { return client.indices().exists(request, RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); return false; } } /** * 獲取低水平客戶端 * RestHighLevelClient還不完善,還需要增加新API,但是RestLowLevelClient非常完善,滿足我們的API需求 * * @return */ public static RestClient getLowLevelClient(RestHighLevelClient client) { return client.getLowLevelClient(); } /** * 使用分詞查詢,並分頁 * * @param index 索引名稱 * @param startPage 當前頁 * @param pageSize 每頁顯示條數 * @param query 查詢條件 * @param fields 需要顯示的字段,逗號分隔(缺省爲全部字段) * @param sortField 排序字段 * @param highlightField 高亮字段 * @return */ public static EsPage searchDataPage(RestHighLevelClient client, String index, int startPage, int pageSize, QueryBuilder query, String fields, String sortField, String highlightField, SortOrder sort) { SearchRequest searchRequest = new SearchRequest(index); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); //SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index); /* if (StringUtils.isNotEmpty(type)) { searchRequestBuilder.setTypes(type.split(",")); sourceBuilder. }*/ // searchRequestBuilder.setSearchType(SearchType.QUERY_THEN_FETCH); // 需要顯示的字段,逗號分隔(缺省爲全部字段) if (StringUtils.isNotEmpty(fields)) { // searchRequestBuilder.setFetchSource(fields.split(","), null); sourceBuilder.fetchSource(fields.split(","), null); } //排序字段 if (StringUtils.isNotEmpty(sortField)) { // searchRequestBuilder.addSort(sortField, SortOrder.DESC); if (sortField.contains(",")){ for (String name : sortField.split(",")){ sourceBuilder.sort(name, sort); } }else { sourceBuilder.sort(sortField, sort); } } // 高亮(xxx=111,aaa=222) if (StringUtils.isNotEmpty(highlightField)) { HighlightBuilder highlightBuilder = new HighlightBuilder(); //highlightBuilder.preTags("<span style='color:red' >");//設置前綴 //highlightBuilder.postTags("</span>");//設置後綴 // 設置高亮字段 highlightBuilder.preTags("<h2>"); highlightBuilder.postTags("</h2>"); String[] highlightFields = highlightField.split(","); for (String f : highlightFields) { highlightBuilder.field(f); } //searchRequestBuilder.highlighter(highlightBuilder); sourceBuilder.highlighter(highlightBuilder); } // 分頁應用 // searchRequestBuilder.setFrom(startPage).setSize(pageSize); sourceBuilder.from(startPage * pageSize).size(pageSize); // 設置是否按查詢匹配度排序 // searchRequestBuilder.setExplain(true); sourceBuilder.explain(true); //打印的內容 可以在 Elasticsearch head 和 Kibana 上執行查詢 // LOGGER.info("\n{}", sourceBuilder); // 執行搜索,返回搜索響應信息 //SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); sourceBuilder.query(query); sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); searchRequest.source(sourceBuilder); SearchResponse searchResponse = null; try { searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); LOGGER.error(e.getMessage(), e); return null; } long totalHits = searchResponse.getHits().totalHits; long length = searchResponse.getHits().getHits().length; LOGGER.debug("共查詢到[{}]條數據,處理數據條數[{}]", totalHits, length); if (searchResponse.status().getStatus() == 200) { // 解析對象 List<Map<String, Object>> sourceList = setSearchResponse(searchResponse, highlightField); return new EsPage(startPage, pageSize, (int) totalHits, sourceList); } return null; } /** * 使用分詞查詢,並分頁 * * @param index 索引名稱 * @param startPage 當前頁 * @param pageSize 每頁顯示條數 * @param query 查詢條件 * @param fields 需要顯示的字段,逗號分隔(缺省爲全部字段) * @param highlightField 高亮字段 * @return */ public static EsPage searchDataPage(RestHighLevelClient client, String index, int startPage, int pageSize, QueryBuilder query, String fields, String highlightField, List<SortingField> sort) { SearchRequest searchRequest = new SearchRequest(index); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); //SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index); /* if (StringUtils.isNotEmpty(type)) { searchRequestBuilder.setTypes(type.split(",")); sourceBuilder. }*/ // searchRequestBuilder.setSearchType(SearchType.QUERY_THEN_FETCH); // 需要顯示的字段,逗號分隔(缺省爲全部字段) if (StringUtils.isNotEmpty(fields)) { // searchRequestBuilder.setFetchSource(fields.split(","), null); sourceBuilder.fetchSource(fields.split(","), null); } //排序字段 if (sort !=null && sort.size() >0) { // searchRequestBuilder.addSort(sortField, SortOrder.DESC); for (SortingField sortField : sort) { sourceBuilder.sort(sortField.getField(), sortField.getSortOrder()); } } // 高亮(xxx=111,aaa=222) if (StringUtils.isNotEmpty(highlightField)) { HighlightBuilder highlightBuilder = new HighlightBuilder(); //highlightBuilder.preTags("<span style='color:red' >");//設置前綴 //highlightBuilder.postTags("</span>");//設置後綴 // 設置高亮字段 highlightBuilder.preTags("<h2>"); highlightBuilder.postTags("</h2>"); String[] highlightFields = highlightField.split(","); for (String f : highlightFields) { highlightBuilder.field(f); } //searchRequestBuilder.highlighter(highlightBuilder); sourceBuilder.highlighter(highlightBuilder); } // 分頁應用 // searchRequestBuilder.setFrom(startPage).setSize(pageSize); sourceBuilder.from(startPage * pageSize).size(pageSize); // 設置是否按查詢匹配度排序 // searchRequestBuilder.setExplain(true); sourceBuilder.explain(true); //打印的內容 可以在 Elasticsearch head 和 Kibana 上執行查詢 // LOGGER.info("\n{}", sourceBuilder); // 執行搜索,返回搜索響應信息 //SearchResponse searchResponse = searchRequestBuilder.execute().actionGet(); sourceBuilder.query(query); sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); searchRequest.source(sourceBuilder); SearchResponse searchResponse = null; try { searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); LOGGER.error(e.getMessage(), e); return null; } long totalHits = searchResponse.getHits().totalHits; long length = searchResponse.getHits().getHits().length; LOGGER.debug("共查詢到[{}]條數據,處理數據條數[{}]", totalHits, length); if (searchResponse.status().getStatus() == 200) { // 解析對象 List<Map<String, Object>> sourceList = setSearchResponse(searchResponse, highlightField); return new EsPage(startPage, pageSize, (int) totalHits, sourceList); } return null; } /** * 高亮結果集 特殊處理 * * @param searchResponse * @param highlightField */ private static List<Map<String, Object>> setSearchResponse(SearchResponse searchResponse, String highlightField) { List<Map<String, Object>> sourceList = new ArrayList<Map<String, Object>>(); for (SearchHit searchHit : searchResponse.getHits().getHits()) { searchHit.getSourceAsMap().put("id", searchHit.getId()); if (StringUtils.isNotEmpty(highlightField)) { // System.out.println("遍歷 高亮結果集,覆蓋 正常結果集" + searchHit.getSourceAsMap()); String[] highlightFields = highlightField.split(","); for (String f : highlightFields) { StringBuffer stringBuffer = new StringBuffer(); Text[] text = null; if (searchHit.getHighlightFields() != null && searchHit.getHighlightFields().get(f) != null) { text = searchHit.getHighlightFields().get(f).getFragments(); } if (text != null) { for (Text str : text) { stringBuffer.append(str.string()); } //遍歷 高亮結果集,覆蓋 正常結果集 searchHit.getSourceAsMap().put(f, stringBuffer.toString()); } } } sourceList.add(searchHit.getSourceAsMap()); } return sourceList; } /** * 使用分詞查詢(返回數量) * * @param index 索引名稱 * @param query 查詢條件 * @return */ public <T> Long searchCount(RestHighLevelClient client,String index, QueryBuilder query) { SearchRequest searchRequest = new SearchRequest(index); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(query); sourceBuilder.fetchSource(true); sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); searchRequest.source(sourceBuilder); SearchResponse searchResponse = null; try { searchResponse = client.search(searchRequest,RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); LOGGER.error(e.getMessage(), e); return null; } if (searchResponse.status().getStatus() == 200) { // 解析對象 return searchResponse.getHits().getTotalHits(); } return null; } /** * 使用分詞查詢(返回實體list) * * @param index 索引名稱 * @param query 查詢條件 * @param size 文檔大小限制 * @param fields 需要顯示的字段,逗號分隔(缺省爲全部字段) * @param sortField 排序字段 * @return */ public static <T> PageESResult<T> searchListBeanData(RestHighLevelClient client, String index, QueryBuilder query, Class<T> entityClass, Integer page, Integer size, String fields, String sortField, SortOrder sort) { SearchRequest searchRequest = new SearchRequest(index); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(query); if (StringUtils.isNotEmpty(fields)) { sourceBuilder.fetchSource(fields.split(","), null); } sourceBuilder.fetchSource(true); if (StringUtils.isNotEmpty(sortField) && sort != null) { sourceBuilder.sort(sortField, sort); } if (size != null && size > 0) { sourceBuilder.from(page * size).size(size); } sourceBuilder.explain(true); sourceBuilder.query(query); sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); searchRequest.source(sourceBuilder); SearchResponse searchResponse = null; try { searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); LOGGER.error(e.getMessage(), e); return null; } if (searchResponse.status().getStatus() == 200) { // 解析對象 return setSearchResponse2(searchResponse, entityClass); } return null; } /** * 使用分詞查詢(返回實體list) * * @param index 索引名稱 * @param query 查詢條件 * @param size 文檔大小限制 * @param fields 需要顯示的字段,逗號分隔(缺省爲全部字段) * @return */ public static <T> PageESResult<T> searchListBeanData(RestHighLevelClient client, String index, QueryBuilder query, Class<T> entityClass, Integer page, Integer size, String fields,List<SortingField> sort) { SearchRequest searchRequest = new SearchRequest(index); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(query); if (StringUtils.isNotEmpty(fields)) { sourceBuilder.fetchSource(fields.split(","), null); } sourceBuilder.fetchSource(true); if (sort !=null && sort.size() >0) { // searchRequestBuilder.addSort(sortField, SortOrder.DESC); for (SortingField sortField : sort) { sourceBuilder.sort(sortField.getField(), sortField.getSortOrder()); } } if (size != null && size > 0) { sourceBuilder.from(page * size).size(size); } sourceBuilder.explain(true); sourceBuilder.query(query); sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); searchRequest.source(sourceBuilder); SearchResponse searchResponse = null; try { searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); } catch (IOException e) { e.printStackTrace(); LOGGER.error(e.getMessage(), e); return null; } if (searchResponse.status().getStatus() == 200) { // 解析對象 return setSearchResponse2(searchResponse, entityClass); } return null; } /** * @param searchResponse */ private static <T> List<T> setSearchResponse(SearchResponse searchResponse, Class<T> entityClass) { List<Map> sourceList = new ArrayList<Map>(); for (SearchHit searchHit : searchResponse.getHits().getHits()) { searchHit.getSourceAsMap().put("id", searchHit.getId()); sourceList.add(searchHit.getSourceAsMap()); } return convertMapListToBeanList(sourceList, entityClass); } private static <T> PageESResult<T> setSearchResponse2(SearchResponse searchResponse, Class<T> entityClass) { PageESResult<T> pageResult = new PageESResult<T>(); pageResult.setTotal(0L); List<T> sourceList = new ArrayList<T>(); long l = System.currentTimeMillis(); for (SearchHit searchHit : searchResponse.getHits().getHits()) { try { //T obj = entityClass.newInstance();//創建bean的實例對象 String sourceAsString = searchHit.getSourceAsString(); JSONObject jsonObject = JSONObject.parseObject(sourceAsString); T t = JSONObject.toJavaObject(jsonObject, entityClass); sourceList.add(t); }catch (Exception e) { e.printStackTrace(); } } pageResult.setList(sourceList); pageResult.setTotal(searchResponse.getHits().getTotalHits()); return pageResult; } /** * 將一個map組成的list轉成實體類bean組成的list * * @param mapList 存了map對象的list * @param clazz 需要將這些map轉成哪個實體類對象 * @return */ public static <T> List<T> convertMapListToBeanList(List<Map> mapList, Class<T> clazz) { List<T> list = new ArrayList<T>(); for (Map map : mapList) { try { T obj = clazz.newInstance();//創建bean的實例對象 for (Object o : map.keySet()) {//遍歷map的key for (Method m : clazz.getMethods()) {//遍歷bean的類中的方法,找到set方法進行賦值 if (m.getName().toLowerCase().equals("set" + o.toString().toLowerCase())) { m.invoke(obj, map.get(o)); } } } list.add(obj); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } } return list; } public static List<String> getAnalyze(RestHighLevelClient client,String text) { List<String> list = new ArrayList<String>(); text = text.length() > 100 ? text.substring(0, 100) : text; Map<String, String> params = new HashMap<>(); params.put("analyzer", "standard"); params.put("text", text); //方式3:提供謂詞和終節點以及可選查詢字符串參數和org.apache.http.HttpEntity對象中包含的請求主體來發送請求 params = Collections.emptyMap(); String jsonString = "{" + "\"analyzer\":\"standard\"," + "\"text\":\""+text+"\"}"; //爲HttpEntity指定ContentType非常重要,因爲它將用於設置Content-Type請求頭,以便Elasticsearch可以正確解析內容。 HttpEntity entity = new NStringEntity(jsonString, ContentType.APPLICATION_JSON); try { Response response = client.getLowLevelClient().performRequest("GET", "_analyze",Collections.emptyMap(),entity); JSONObject tokens = JSONObject.parseObject(EntityUtils.toString(response.getEntity())); JSONArray arrays = tokens.getJSONArray("tokens"); for (int i = 0; i < arrays.size(); i++) { JSONObject obj = JSON.parseObject(arrays.getString(i)); list.add(obj.getString("token")); } } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } return list; } /* public void getIkAnalyzeSearchTerms(String searchContent) { AnalyzeRequest analyzeRequest = new AnalyzeRequest("kb.area").text(searchContent).analyzer("standard"); List<AnalyzeResponse.AnalyzeToken> tokens = client.admin().indices().analyze(analyzeRequest).actionGet().getTokens(); client.getLowLevelClient().performRequest() for (AnalyzeResponse.AnalyzeToken token : tokens) { System.out.println(token.getTerm()); } }*/ }