java编程⼯具es_java使⽤es查询的⽰例代码
java使⽤es查询的⽰例代码
发布时间:2020-09-17 23:42:22
来源:脚本之家
阅读:118
作者:浪⼦⼀枚
众所周知,elasticsearch简称es,它是基于基于Lucene的搜索服务器。它提供了⼀个分布式多⽤户能⼒的全⽂搜索引擎,基于RESTful web接⼝。Elasticsearch是⽤Java开发的,并作为Apache许可条款下的开放源码发布,是当前流⾏的企业级搜索引擎。设计⽤于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使⽤⽅便。
我们建⽴⼀个⽹站或应⽤程序,并要添加搜索功能,但是想要完成搜索⼯作的创建是⾮常困难的。我们希望搜索解决⽅案要运⾏速度快,我们希望能有⼀个零配置和⼀个完全免费的搜索模式,我们希望能够简单地使⽤JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可⽤,我们希望能够从⼀台开
始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建⽴⼀个云的解决⽅案。因此我们利⽤Elasticsearch来解决所有这些问题以及可能出现的更多其它问题。
在java中使⽤es时,⽆⾮想解决的是查询速度不够快,效率不够⾼问题,单⼀从数据库⾥查询数据已经不能拿满⾜当前的业务需求,ok!那么现在我们来讲述⼀下如何在java中使⽤到es这个神奇的搜索服务器呢,⾸先,你得要去引⽤es的依赖包,依赖如下:
org.elasticsearch.client
transport
5.5.0
org.elasticsearch.client
transport
java爱心代码编程简单5.5.0
org.elasticsearch
elasticsearch
5.5.0
⼀切准备就绪后接下来进⼊到我们真正期待的时刻,什么呢,没错,集成es,究竟如何在java⾥⾯搜索查询es服务器⾥⾯的东西呢,让我⼀⼀来为你揭晓:
⾸先我们建议⼀个es的⼯具类
package com.osa.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.URL;
import java.URLConnection;
import java.URLEncoder;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.http.client.ClientProtocolException;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
public class HTTPSentUtils {
/**
* 向指定URL发送GET⽅法的请求
*
* @param url
* 发送请求的URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。* @return URL 所代表远程资源的响应结果
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通⽤的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建⽴实际的连接
// 获取所有响应头字段
Map> map = HeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.out.println(key + "--->" + (key));
}
// 定义 BufferedReader输⼊流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使⽤finally块来关闭输⼊流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
/**
* 向指定 URL 发送POST⽅法的请求
*
* @param url
* 发送请求的 URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param) { PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
/
/ 设置通⽤的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); // 发送POST请求必须设置如下两⾏
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
out = new OutputStream());
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输⼊流来读取URL的响应
in = new BufferedReader(
new InputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!"+e);
e.printStackTrace();
}
//使⽤finally块来关闭输出流、输⼊流
finally{
try{
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
return result;
}
}
⼯具类有了之后,可以看到⾥⾯有两个发送请求的⽅法,⼀个是sendGet和sendPost⽅法,两个⽅法可以基于⾃⼰的选择选⽤,当然这只是个发送请求的⽅法,如何调⽤?在这⾥的话,我们既然是从es⾥⾯查询,就没有必要使⽤mybatis或者hibernate框架了,可以在数据层中,⾃⼰定义sql,然后将sql将拼好的sql通过前⾯的⼯具类调⽤sendGet/sendPost⽅法,如下:
String de(" select * from table");encode⽅法主要是去除sql⾥⾯的⼀些空格
String result=HTTPSentUtils.sendGet("221.124.71.8:9200/_sql", "sql="+sql);ip加端⼝⾃⼰可以在安装的时候配置
OK!⼀般到这个时候的发送可以成功的话,就能取到es⾥⾯的数据,因为es⾥⾯返回的都是json数据,所以我们
格式化⼀下json字符串
net.sf.json.JSONObject jsonObject =net.sf.json.JSONObject.fromObject(result);
//取出hits标签
net.sf.json.JSONObject hitsjsonObject = JSONObject("hits");
数据拿到之后,结下来就是业务操作了。到这⾥也差不多结束了。
以上是查询的⼀些操作,那么如果我们需要将数据批量插⼊到es⾥⾯该如何操作?举个例⼦吧
package lasticsearch.manager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。