elasticsearch 简单demo RestHighLevelClient LowLeveClient
参考:
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.7/java-rest-low.html
www.elastic.co/guide/en/elasticsearch/client/java-rest/6.7/java-rest-high-search.html
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties; import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.nio.entity.NStringEntity;
import org.apache.http.util.EntityUtils;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
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.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.junit.Test; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; public class ElasticUtil {
static ObjectMapper mapper = new ObjectMapper();
static RestClient rc=null; public static RestClient getInstance() throws IOException{
if(rc==null) {
return getElasticClient();
}else {
return rc;
}
} /**
* RestHighLevelClient使用详情请参考
* <a href="https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.7/java-rest-high-search.html">官方文档</a><br>
* 使用样例见{@link #restHighLevelClient_Demo}
* @return
* @throws IOException
* @since jdk 1.8
*/
public static RestHighLevelClient getRestHighLevelClient() throws IOException{
Properties pro=new Properties();
String filePath=System.getProperty("user.dir")+File.separator+"config/elasticsearch.properties";
try {
pro.load(new FileReader(filePath));
} catch (Exception e) {
e.printStackTrace();
}
String ip=pro.getProperty("ip");
String port=pro.getProperty("port");
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost(ip, Integer.valueOf(port), "http")));
return client;
} /**
* LowLeveClient使用详情请参考
* <a href="https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.7/java-rest-high-search.html">官方文档</a><br>
* 使用样例见{@link #restLowLeveClient_Demo}
* @return
* @throws IOException
* @since jdk 1.7
*/
public static RestClient getElasticClient() throws IOException{
Properties pro=new Properties();
String filePath=System.getProperty("user.dir")+File.separator+"config/elasticsearch.properties";
try {
pro.load(new FileReader(filePath));
} catch (Exception e) {
e.printStackTrace();
}
String ip=pro.getProperty("ip");
String port=pro.getProperty("port");
return getElasticClient(ip,Integer.valueOf(port),username,passwd);
} public static void main(String[] args) throws IOException {
SearchResponse res=getELKSerach("index1","关键字",0,10,new String[] {"<em>","</em>"});
SearchHits hits = res.getHits();
for(SearchHit hit: hits){
// System.out.println(); //高亮部分
// System.out.println(hit.getScore()); //单个结果集评分
Map<String, Object> map=hit.getSourceAsMap();
// System.out.println(map); //json数据转为map<k,v>
for(Entry<String, HighlightField> ent:hit.getHighlightFields().entrySet()) {
String highl_key=ent.getValue().getName();
String highl_val=ent.getValue().getFragments()[0].toString();
map.put(highl_key, highl_val);
// System.out.println(ent.getKey()+"\t"+ent.getValue());
// System.out.println(ent.getValue().getName()+"\t"+ent.getValue().getFragments()[0]);
}
System.out.println(map);
}
} /**
* @param index 查询的index(类似mysql的datadb)
* @param keyWord 查询的关键字
* @param from 分页参数1
* @param size 分页参数2
* @return
* @throws IOException
*/
public static SearchResponse getELKSerach(String index,String keyWord,int from,int size) throws IOException {
RestHighLevelClient client= getRestHighLevelClient();
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.queryStringQuery(keyWord));
searchSourceBuilder.timeout(TimeValue.timeValueSeconds(5));
searchSourceBuilder.from(from);
searchSourceBuilder.size(size);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse=client.search(searchRequest, RequestOptions.DEFAULT);
client.close();
return searchResponse;
}
/**
* @param index 查询的index(类似mysql的datadb)
* @param keyWord 查询的关键字
* @param from 分页参数1
* @param size 分页参数2
* @param Highlight 自定义css
* @return
* @throws IOException
*/
public static SearchResponse getELKSerach(String index,String keyWord,int from,int size,String[] Highlight) throws IOException {
RestHighLevelClient client= getRestHighLevelClient();
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//高亮
if(Highlight.length==2) {
HighlightBuilder highlightBuilder =new HighlightBuilder();
highlightBuilder.field("*");//require_field_match
highlightBuilder.requireFieldMatch(false);
highlightBuilder.preTags(Highlight[0]);
highlightBuilder.postTags(Highlight[1]);
searchSourceBuilder.highlighter(highlightBuilder);
}
//查询
searchSourceBuilder.query(QueryBuilders.queryStringQuery(keyWord));
searchSourceBuilder.timeout(TimeValue.timeValueSeconds(5));
searchSourceBuilder.from(from);
searchSourceBuilder.size(size);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse=client.search(searchRequest, RequestOptions.DEFAULT);
client.close();
return searchResponse;
} void restLowLeveClient_Demo() throws IOException {
RestClient rc =getInstance();
HashMap<String,String> params=new HashMap<>();
HttpEntity entity= getHttpEntityByKeyWord("关键字",0,10);
Response response =rc.performRequest("GET", "/index1/_search",params,entity);
System.out.println(response.getStatusLine().getStatusCode()); String responseBody = EntityUtils.toString(response.getEntity());
System.out.println(responseBody);
JSONObject result = JSONObject.parseObject(responseBody);
JSONObject hists=result.getJSONObject("hits");
System.out.println(hists);
JSONArray list=hists.getJSONArray("hits");
System.out.println(list);
int i= list.size();
System.out.println("all:"+i);
System.out.println(list.get(0));
rc.close();
} void restHighLevelClient_Demo() throws IOException {
RestHighLevelClient client= getRestHighLevelClient();
SearchRequest searchRequest = new SearchRequest("index1");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.queryStringQuery("关键字"));
searchSourceBuilder.timeout(TimeValue.timeValueSeconds(5));
searchSourceBuilder.from(0);
searchSourceBuilder.size(10);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse=client.search(searchRequest, RequestOptions.DEFAULT);
RestStatus status = searchResponse.status();
System.out.println(status);
SearchHits hits = searchResponse.getHits();
for(SearchHit hit: hits){
System.out.println(hit.getScore());
System.out.println(hit.getSourceAsMap());
}
client.close();
} /*
* 有分页
*/
static HttpEntity getHttpEntityByKeyWord(String keyWord,int from,int size) throws IOException{
String queryString=
"{\r\n" +
" \"from\" : "+from+", \"size\" : "+size+","+
" \"query\": {\r\n" +
" \"multi_match\" : {\r\n" +
" \"query\": \""+keyWord+"\"\r\n" +
" }\r\n" +
" }\r\n" +
"}";
return new NStringEntity(queryString, ContentType.APPLICATION_JSON);
} static HttpEntity getHttpEntityByKeyWord(String keyWord) throws IOException{
String queryString=
"{\r\n" +
" \"query\": {\r\n" +
" \"multi_match\" : {\r\n" +
" \"query\": \""+keyWord+"\"\r\n" +
" }\r\n" +
" }\r\n" +
"}";
return new NStringEntity(queryString, ContentType.APPLICATION_JSON);
}
/**
* 获取elastic的client的信息
* @param ip
* @param port
* @param usename
* @param passwd
* @return
*/
public static RestClient getElasticClient(String ip, Integer port, String usename, String passwd) {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(usename, passwd));
RestClient restClient = RestClient.builder(new HttpHost(ip, port, "http"))
.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
httpClientBuilder.disableAuthCaching();
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
}
}).build();
return restClient;
} public static HttpEntity entiy2HttpEntity(Object ent) throws JsonGenerationException, JsonMappingException, IOException{
String jsonString = mapper.writeValueAsString(ent);
HttpEntity entity = new NStringEntity(jsonString, ContentType.APPLICATION_JSON);
return entity;
} /**
* 批处理用
* @param list
* @return
* @throws JsonGenerationException
* @throws JsonMappingException
* @throws IOException
*/
public static HttpEntity entiyList2HttpEntity(List<Object> list,String index,String type) throws JsonGenerationException, JsonMappingException, IOException{
String tmp="{ \"index\": { \"_index\": \""+index+"\", \"_type\": \""+type+"\" }}";
StringBuilder sb=new StringBuilder();
for (Object ent : list) {
String jsonString = mapper.writeValueAsString(ent);
sb.append(tmp).append("\n").append(jsonString).append("\n");
} HttpEntity entity = new NStringEntity(sb.toString(), ContentType.APPLICATION_JSON);
return entity;
} public static String Response2String( Response response) throws IOException{
return EntityUtils.toString(response.getEntity());
} }
elasticsearch 简单demo RestHighLevelClient LowLeveClient的更多相关文章
- 设计模式之单例模式的简单demo
/* * 设计模式之单例模式的简单demo */ class Single { /* * 创建一个本类对象. * 和get/set方法思想一样,类不能直接调用对象 * 所以用private限制权限 * ...
- Spring的简单demo
---------------------------------------- 开发一个Spring的简单Demo,具体的步骤如下: 1.构造一个maven项目 2.在maven项目的pom.xml ...
- 使用Spring缓存的简单Demo
使用Spring缓存的简单Demo 1. 首先创建Maven工程,在Pom中配置 <dependency> <groupId>org.springframework</g ...
- Managed DirectX中的DirectShow应用(简单Demo及源码)
阅读目录 介绍 准备工作 环境搭建 简单Demo 显示效果 其他 Demo下载 介绍 DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染.交互式音乐和 ...
- angular实现了一个简单demo,angular-weibo-favorites
前面必须说一段 帮客户做了一个过渡期的项目,唯一的要求就是速度,我只是会点儿基础的php,于是就用tp帮客户做了这个项目.最近和客户架构沟通,后期想把项目重新做一下,就用现在最流行的技术,暂时想的使用 ...
- NEST.net Client For Elasticsearch简单应用
NEST.net Client For Elasticsearch简单应用 由于最近的一个项目中的搜索部分要用到 Elasticsearch 来实现搜索功能,苦于英文差及该方面的系统性资料不好找,在实 ...
- Solr配置与简单Demo[转]
Solr配置与简单Demo 简介: solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目.它的官方网址在http://lucene.apache.org/sol ...
- 二维码简单Demo
二维码简单Demo 一.视图 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name=&qu ...
- android JNI 简单demo(2)它JNI demo 写
android JNI 简单demo(2)它JNI demo 写 一.搭建Cygwin 环境:http://blog.csdn.net/androidolblog/article/details/25 ...
随机推荐
- Programming | 获取图像频域并分解为高低频
1. DCT变换 参考:https://stackoverflow.com/questions/22322427/decomposing-an-image-into-two-frequency-com ...
- CSP-S 2019 题解
D1T1-格雷码 题中给出了构造格雷码的方法. $solve(n,k)$表示求出$2^n$意义下排名为$k$的格雷码, 只要比较一下考虑最高位的0/1取值就好了. 部分分提示了要开$unsigned\ ...
- nginx二级域名反向代理
nginx二级域名反向代理 添加两个开发测试的域名 test.xxx.com :8088 testmobile.xxx.com: 8089 内网地址:127.0.0.1 外网地址:127.0.0.1 ...
- VMware workstation 12虚拟机安装CentOS7详细安装教程
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统. 虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全 ...
- 初探云原生应用管理之:聊聊 Tekton 项目
[编者的话]“人间四月芳菲尽,山寺桃花始盛开.” 越来越多专门给 Kubernetes 做应用发布的工具开始缤纷呈现,帮助大家管理和发布不断增多的 Kubernetes 应用.在做技术选型的时候,我们 ...
- [Zabbix] 安装MySQL5.7, 部署Zabbix到CentOS 7日记
安装环境:CentOS7 64位,安装MySQL5.7 一.安装 MySQL 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads ...
- kali渗透综合靶机(三)--bulldog2靶机
kali渗透综合靶机(三)--bulldog2靶机 靶机地址:https://download.vulnhub.com/bulldog/Bulldog2.ova 一.主机发现 1.netdiscove ...
- Mysql综述--数据是如何读存的?(2)
页的结构 页是一种InnoDB管理存储空间的基本单位,它一般大小在16kb左右.实际上存在着许多不同类型的页,我们这次主要介绍的页是用来存储数据的,也叫做索引页. 接下来看看索引页的结构图: 比较重要 ...
- 使用EF批量新增数据十分缓慢
使用EF来批量新增数据,发现效率非常的差,几千条数据时甚至需要几分钟来执行,迫于无奈使用sql来执行了. 今天偶然看到一篇关于EF的文章,才发觉原来是自己对EF不够了解的原因. 一般新增时我们是将所有 ...
- vue.js环境在window和linux安装
一.windows环境下安装vue 1.node.js安装:在node.js的官网上下载node的安装包 https://nodejs.org/en/download/ 安装完毕之后,在命令行下验证是 ...