elasticsearch 简单demo RestHighLevelClient LowLeveClient

a

 
  1
  3 import java.io.File;
  4 import java.io.FileReader;
  5 import java.io.IOException;
  6 import java.util.HashMap;
  7 import java.util.List;
  8 import java.util.Map;
  9 import java.util.Map.Entry;
 10 import java.util.Properties;
 11
 12 import org.apache.http.HttpEntity;
 13 import org.apache.http.HttpHost;
 14 import org.apache.http.auth.AuthScope;
 15 import org.apache.http.auth.UsernamePasswordCredentials;
 16 import org.apache.http.client.CredentialsProvider;
 17 import org.apache.http.entity.ContentType;
 18 import org.apache.http.impl.client.BasicCredentialsProvider;
 19 import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
 20 import org.apache.http.nio.entity.NStringEntity;
 21 import org.apache.http.util.EntityUtils;
 22 import org.codehaus.jackson.JsonGenerationException;
 23 import org.codehaus.jackson.map.JsonMappingException;
 24 import org.codehaus.jackson.map.ObjectMapper;
 25 import org.elasticsearch.action.search.SearchRequest;
 26 import org.elasticsearch.action.search.SearchResponse;
 27 import org.elasticsearch.client.RequestOptions;
 28 import org.elasticsearch.client.Response;
 29 import org.elasticsearch.client.RestClient;
 30 import org.elasticsearch.client.RestClientBuilder;
 31 import org.elasticsearch.client.RestHighLevelClient;
 32 import org.elasticsearch.common.unit.TimeValue;
 33 import org.elasticsearch.index.query.QueryBuilders;
 34 import org.elasticsearch.rest.RestStatus;
 35 import org.elasticsearch.search.SearchHit;
 36 import org.elasticsearch.search.SearchHits;
 37 import org.elasticsearch.search.builder.SearchSourceBuilder;
 38 import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
 39 import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
 40 import org.junit.Test;
 41
 42 import com.alibaba.fastjson.JSONArray;
 43 import com.alibaba.fastjson.JSONObject;
 44
 45 public class ElasticUtil {
 46      static  ObjectMapper mapper = new ObjectMapper();
 47      static RestClient rc=null;
 48
 49      public static RestClient getInstance() throws IOException{
 50          if(rc==null) {
 51              return getElasticClient();
 52          }else {
 53              return rc;
 54          }
 55      }
 56
 57     /**
 58      * RestHighLevelClient使用详情请参考
 59      * <a href="https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.7/java-rest-high-search.html">官方文档</a><br>
 60      * 使用样例见{@link #restHighLevelClient_Demo}
 61      * @return
 62      * @throws IOException
 63      * @since jdk 1.8
 64      */
 65      public static RestHighLevelClient getRestHighLevelClient() throws IOException{
 66          Properties pro=new Properties();
 67          String filePath=System.getProperty("user.dir")+File.separator+"config/elasticsearch.properties";
 68          try {
 69              pro.load(new FileReader(filePath));
 70          } catch (Exception e) {
 71              e.printStackTrace();
 72          }
 73          String ip=pro.getProperty("ip");
 74          String port=pro.getProperty("port");
 75          RestHighLevelClient client = new RestHighLevelClient(
 76                     RestClient.builder(
 77                             new HttpHost(ip, Integer.valueOf(port), "http")));
 78          return client;
 79      }
 80
 81
 82     /**
 83      * LowLeveClient使用详情请参考
 84      * <a href="https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.7/java-rest-high-search.html">官方文档</a><br>
 85      * 使用样例见{@link #restLowLeveClient_Demo}
 86      * @return
 87      * @throws IOException
 88      * @since jdk 1.7
 89      */
 90      public static RestClient getElasticClient() throws IOException{
 91          Properties pro=new Properties();
 92         String filePath=System.getProperty("user.dir")+File.separator+"config/elasticsearch.properties";
 93          try {
 94             pro.load(new FileReader(filePath));
 95         } catch (Exception e) {
 96             e.printStackTrace();
 97         }
 98          String ip=pro.getProperty("ip");
 99          String port=pro.getProperty("port");
100    102          return getElasticClient(ip,Integer.valueOf(port),username,passwd);
103     }
104
105     public static void main(String[] args) throws IOException {
106         SearchResponse res=getELKSerach("index1","关键字",0,10,new String[] {"<em>","</em>"});
107          SearchHits hits = res.getHits();
108         for(SearchHit hit: hits){
109 //            System.out.println();        //高亮部分
110 //            System.out.println(hit.getScore());        //单个结果集评分
111             Map<String, Object> map=hit.getSourceAsMap();
112 //            System.out.println(map);  //json数据转为map<k,v>
113             for(Entry<String, HighlightField>  ent:hit.getHighlightFields().entrySet()) {
114                 String highl_key=ent.getValue().getName();
115                 String highl_val=ent.getValue().getFragments()[0].toString();
116                 map.put(highl_key, highl_val);
117 //                System.out.println(ent.getKey()+"\t"+ent.getValue());
118 //                System.out.println(ent.getValue().getName()+"\t"+ent.getValue().getFragments()[0]);
119             }
120             System.out.println(map);
121         }
122     }
123     142
143     /**
144      * @param index   查询的index(类似mysql的datadb)
145      * @param keyWord   查询的关键字
146      * @param from    分页参数1
147      * @param size          分页参数2
148      * @return
149      * @throws IOException
150      */
151     public static SearchResponse getELKSerach(String index,String keyWord,int from,int size) throws IOException {
152          RestHighLevelClient client= getRestHighLevelClient();
153          SearchRequest searchRequest = new SearchRequest(index);
154          SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
155          searchSourceBuilder.query(QueryBuilders.queryStringQuery(keyWord));
156          searchSourceBuilder.timeout(TimeValue.timeValueSeconds(5));
157          searchSourceBuilder.from(from);
158          searchSourceBuilder.size(size);
159          searchRequest.source(searchSourceBuilder);
160          SearchResponse searchResponse=client.search(searchRequest, RequestOptions.DEFAULT);
161          client.close();
162         return searchResponse;
163     }
164     /**
165  * @param index   查询的index(类似mysql的datadb)
166      * @param keyWord   查询的关键字
167      * @param from    分页参数1
168      * @param size          分页参数2
169      * @param Highlight   自定义css
170      * @return
171      * @throws IOException
172      */
173     public static SearchResponse getELKSerach(String index,String keyWord,int from,int size,String[] Highlight) throws IOException {
174          RestHighLevelClient client= getRestHighLevelClient();
175          SearchRequest searchRequest = new SearchRequest(index);
176          SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
177          //高亮
178          if(Highlight.length==2) {
179              HighlightBuilder highlightBuilder =new HighlightBuilder();
180              highlightBuilder.field("*");//require_field_match
181              highlightBuilder.requireFieldMatch(false);
182              highlightBuilder.preTags(Highlight[0]);
183              highlightBuilder.postTags(Highlight[1]);
184              searchSourceBuilder.highlighter(highlightBuilder);
185          }
186          //查询
187          searchSourceBuilder.query(QueryBuilders.queryStringQuery(keyWord));
188          searchSourceBuilder.timeout(TimeValue.timeValueSeconds(5));
189          searchSourceBuilder.from(from);
190          searchSourceBuilder.size(size);
191          searchRequest.source(searchSourceBuilder);
192          SearchResponse searchResponse=client.search(searchRequest, RequestOptions.DEFAULT);
193          client.close();
194         return searchResponse;
195     }
196
197       void restLowLeveClient_Demo() throws IOException {
198          RestClient rc =getInstance();
199          HashMap<String,String> params=new HashMap<>();
200          HttpEntity entity= getHttpEntityByKeyWord("代廷安",0,10);
201          Response response =rc.performRequest("GET", "/table_icp_record/_count",params,entity);
202          System.out.println(response.getStatusLine().getStatusCode());
203
204          String responseBody = EntityUtils.toString(response.getEntity());
205          System.out.println(responseBody);
206          JSONObject result = JSONObject.parseObject(responseBody);
207          JSONObject  hists=result.getJSONObject("hits");
208          System.out.println(hists);
209          JSONArray list=hists.getJSONArray("hits");
210          System.out.println(list);
211          int i= list.size();
212          System.out.println("all:"+i);
213          System.out.println(list.get(0));
214          rc.close();
215      }
216
217      void restHighLevelClient_Demo() throws IOException {
218          RestHighLevelClient client= getRestHighLevelClient();
219          SearchRequest searchRequest = new SearchRequest("index1");
220          SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
221          searchSourceBuilder.query(QueryBuilders.queryStringQuery("关键字"));
222          searchSourceBuilder.timeout(TimeValue.timeValueSeconds(5));
223          searchSourceBuilder.from(0);
224          searchSourceBuilder.size(10);
225          searchRequest.source(searchSourceBuilder);
226          SearchResponse searchResponse=client.search(searchRequest, RequestOptions.DEFAULT);
227          RestStatus status = searchResponse.status();
228          System.out.println(status);
229          SearchHits hits = searchResponse.getHits();
230         for(SearchHit hit: hits){
231             System.out.println(hit.getScore());
232             System.out.println(hit.getSourceAsMap());
233         }
234          client.close();
235      }
236
237          /*
238           * 有分页
239           */
240         static HttpEntity getHttpEntityByKeyWord(String  keyWord,int from,int size) throws IOException{
241              String queryString=
242                      "{\r\n" +
243                     "   \"from\" : "+from+", \"size\" : "+size+","+
244                      "   \"query\": {\r\n" +
245                      "    \"multi_match\" : {\r\n" +
246                      "      \"query\": \""+keyWord+"\"\r\n" +
247                      "    }\r\n" +
248                      "  }\r\n" +
249                      "}";
250             return new NStringEntity(queryString, ContentType.APPLICATION_JSON);
251         }
252
253         static HttpEntity getHttpEntityByKeyWord(String  keyWord) throws IOException{
254              String queryString=
255                      "{\r\n" +
256                      "   \"query\": {\r\n" +
257                      "    \"multi_match\" : {\r\n" +
258                      "      \"query\": \""+keyWord+"\"\r\n" +
259                      "    }\r\n" +
260                      "  }\r\n" +
261                      "}";
262             return new NStringEntity(queryString, ContentType.APPLICATION_JSON);
263         }
264     /**
265      * 获取elastic的client的信息
266      * @param ip
267      * @param port
268      * @param usename
269      * @param passwd
270      * @return
271      */
272     public static RestClient getElasticClient(String ip, Integer port, String usename, String passwd) {
273         final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
274         credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(usename, passwd));
275         RestClient restClient = RestClient.builder(new HttpHost(ip, port, "http"))
276                 .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
277                     public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
278                         httpClientBuilder.disableAuthCaching();
279                         return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
280                     }
281                 }).build();
282         return restClient;
283     }
284
285     public static HttpEntity entiy2HttpEntity(Object ent) throws JsonGenerationException, JsonMappingException, IOException{
286          String jsonString = mapper.writeValueAsString(ent);
287          HttpEntity entity = new NStringEntity(jsonString, ContentType.APPLICATION_JSON);
288          return entity;
289     }
290
291     /**
292      * 批处理用
293      * @param list
294      * @return
295      * @throws JsonGenerationException
296      * @throws JsonMappingException
297      * @throws IOException
298      */
299     public static HttpEntity entiyList2HttpEntity(List<Object> list,String index,String type) throws JsonGenerationException, JsonMappingException, IOException{
300         String tmp="{ \"index\":  { \"_index\": \""+index+"\", \"_type\": \""+type+"\" }}";
301         StringBuilder sb=new StringBuilder();
302         for (Object ent : list) {
303             String jsonString = mapper.writeValueAsString(ent);
304             sb.append(tmp).append("\n").append(jsonString).append("\n");
305         }
306
307         HttpEntity entity = new NStringEntity(sb.toString(), ContentType.APPLICATION_JSON);
308         return entity;
309     }
310
311     public static String Response2String( Response response) throws IOException{
312             return EntityUtils.toString(response.getEntity());
313     }
314
315 }

原文地址:https://www.cnblogs.com/yanghaolie/p/10880037.html

时间: 2024-08-30 05:07:37

elasticsearch 简单demo RestHighLevelClient LowLeveClient的相关文章

Ext简单demo示例

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <titl

Unity3d 背景、音效 播放 简单demo

仅实现功能,AudioListener在MainCamera中 using UnityEngine; using System.Collections; using System.Collections.Generic; public class MusicManger : MonoBehaviour { AudioSource _backMusicSource = null; AudioSource _SoundSource = null; //public string musicName

Android SQLite最简单demo实现(增删查改)

本来不太想写这篇博客的,但是看到网上的关于android数据库操作的博文都讲得很详细,对于像我这样的新手入门了解SQLite的基本操作有一定难度,所以我参考了网上的一些博客文章,并自己亲自摸索了一遍,希望写出这么一篇博文来记录SQLite的最基本操作,同时也希望能够对android的新手们有些帮助. 参考博客:http://www.20864.com/201247/274.html 这里只是一个示范性的demo,并没实现什么具体功能,只实现了对数据库的增删查改操作. 以下是实现demo的步骤:

FORM验证简单demo

详解稍后加入. 项目结构如图: web.xml <?xml version="1.0" encoding="UTF-8" ?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocat

APS.NET MVC4生成解析二维码简单Demo

一.视图 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="~/Scripts/jquery-1.8.2.min.js"></scri

android JNI 简单demo(2)之JNI demo 编写

android JNI 简单demo(2)之JNI demo 编写 一.搭建Cygwin 环境:http://blog.csdn.net/androidolblog/article/details/25559013 二.JNI 基本要素: 1.编写 含native 方法的java文件. 2.把该文件用javah 生成 Cygwin 编译库时要用到的头文件,既*.h 文件. 3.编写*.c 文件,在*.c文件中,实现 *.h 中的方法. 4.编写mk文件. 5.配置NDK环境. 6.用Cygwin

二维码简单Demo

二维码简单Demo 一.视图 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="~/Scripts/jquery-1.8.2.min.js">

Highcharts+Ajax+Json+Sturts2实现的图形异步实时刷新的一个简单demo

原文:Highcharts+Ajax+Json+Sturts2实现的图形异步实时刷新的一个简单demo 源代码下载地址:http://www.zuidaima.com/share/1550463370480640.htm 此功能可以用在后端对数据的实时抓取,前端动态更新时使用,可以根据数据的变化进行实时刷新,基于之前我上传的一个图形demo改制.如有意见建议,疑问,大家可以留言一起探讨. 源代码截图:

Spring的简单demo

---------------------------------------- 开发一个Spring的简单Demo,具体的步骤如下: 1.构造一个maven项目 2.在maven项目的pom.xml文件中添加spring的依赖包 3.开发一个接口Api 和两个实现类ApiOne,ApiTwo 4.新增Spring的配置文件applicationContext.xml 5.编写测试类Client 下面开始具体每个步骤的描述: 步骤1:构造一个maven项目 springTest 步骤2:在mav