参考:

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的更多相关文章

  1. 设计模式之单例模式的简单demo

    /* * 设计模式之单例模式的简单demo */ class Single { /* * 创建一个本类对象. * 和get/set方法思想一样,类不能直接调用对象 * 所以用private限制权限 * ...

  2. Spring的简单demo

    ---------------------------------------- 开发一个Spring的简单Demo,具体的步骤如下: 1.构造一个maven项目 2.在maven项目的pom.xml ...

  3. 使用Spring缓存的简单Demo

    使用Spring缓存的简单Demo 1. 首先创建Maven工程,在Pom中配置 <dependency> <groupId>org.springframework</g ...

  4. Managed DirectX中的DirectShow应用(简单Demo及源码)

    阅读目录 介绍 准备工作 环境搭建 简单Demo 显示效果 其他 Demo下载 介绍 DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染.交互式音乐和 ...

  5. angular实现了一个简单demo,angular-weibo-favorites

    前面必须说一段 帮客户做了一个过渡期的项目,唯一的要求就是速度,我只是会点儿基础的php,于是就用tp帮客户做了这个项目.最近和客户架构沟通,后期想把项目重新做一下,就用现在最流行的技术,暂时想的使用 ...

  6. NEST.net Client For Elasticsearch简单应用

    NEST.net Client For Elasticsearch简单应用 由于最近的一个项目中的搜索部分要用到 Elasticsearch 来实现搜索功能,苦于英文差及该方面的系统性资料不好找,在实 ...

  7. Solr配置与简单Demo[转]

    Solr配置与简单Demo 简介: solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目.它的官方网址在http://lucene.apache.org/sol ...

  8. 二维码简单Demo

    二维码简单Demo 一.视图 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name=&qu ...

  9. android JNI 简单demo(2)它JNI demo 写

    android JNI 简单demo(2)它JNI demo 写 一.搭建Cygwin 环境:http://blog.csdn.net/androidolblog/article/details/25 ...

随机推荐

  1. 数据仓库001 - 复习Linux shell命令 - pwd mkdir mv tail -f xxx.log 和 ail -F xxx.log

    1.  [root@localhost ~]#  的含义 ?  [登录的用户  机器的名称 家目录] 2. 查看当前光标所在的目录   pwd [root@localhost ~]# pwd /roo ...

  2. @Resource和@Autowire用谁?

    我选了@Resource 1.当注入的属性是接口 1.1在接口只有一个实现类的时候,@Resource和@Autowire 在功能上是没有区别的 1.2如果接口有多个实现类,在写法上,@Autowir ...

  3. POJ-2006 Litmus Test 高精度

    The pH scale measures the concentration of protons (H +) in a solution and, therefore, its acidity o ...

  4. MySQL5.7安装脚本

    目录结构: install_mysql.sh:安装脚本 my.cnf: MySQL配置文件 mysql--linux-glibc2.-x86_64.tar.gz:MySQL二进制包 以下为目录中的文件 ...

  5. 图书推荐《图解HTTP》

    作品简介 本书对互联网基盘——HTTP协议进行了全面系统的介绍.作者由HTTP协议的发展历史娓娓道来,严谨细致地剖析了HTTP协议的结构,列举诸多常见通信场景及实战案例,最后延伸到Web安全.最新技术 ...

  6. 使用Composer安装阿里云短信失败

    安装步骤 请参考以下步骤,使用Composer安装依赖. 如果在您的系统上全局安装Composer,您可以在项目目录中运行以下内容,将 Alibaba Cloud Client for PHP 添加为 ...

  7. 家电制造业中MES系统发挥的作用

    人们对MES系统在家电生产领域的应用并不陌生,这是离散型MES应用的一个重要领域. 如空调.冰箱.电视.洗衣机等生产加工中均具有批量制造.多品种小批量.单件生产的等特点,很多企业也是以以订单.合同为核 ...

  8. poi操作Word创建超链接

    项目引入poi: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</ ...

  9. ZooKeeper之服务器动态上下线案例

    需求 某分布式系统中,主节点可以有多台,可以动态上下线,任意一台客户端都能实时感知到主节点服务器的上下线. 需求分析 具体实现 先在集群上创建/servers节点 create /servers &q ...

  10. flask上下文管理之threading.local

    Flask之上下文管理 知识储备之问题情境: request中的参数: 单进程单线程 单进程多线程-->reqeust 会因为多个请求,数据发生错乱.--->可以基于threading.l ...