快速實現es的各種查詢的功能包括關係型資料庫中的and、between、in、like、sortfield、sortdirect 分頁和高亮顯示等
快速開始!只需構造對應的引數呼叫方法即可
1.首先建立es客戶端例項,連線es
(雙重校驗鎖實現單例,執行緒安全,節約資源)
//用來將客戶端物件儲存起來,避免多次例項化
private
volatile
static map
clientmap=
newconcurrenthashmap
();//抽取從es中查詢資料需要的公共**,只需要載入一次,避免每次查詢均載入
//用searchsourcebuilder來構造查詢請求體
static searchsourcebuilder sourcebuilder =
newsearchsourcebuilder()
;static
//傳入引數,獲取客戶端(採用物件池模式,乙個位址只一次建立,永久使用)
public
static resthighlevelclient getclient
(string url,
int port,string loginname,string password)})
);logger.
info
(clientid+
"建立了resthighlevelclient客戶端");
clientmap.
put(clientid, client);}
}}return client;
}
2.介面接收引數,呼叫方法返回查詢資料
(value =
"/getpage"
)public serviceresult getpage
(@requestbody string json)
catch
(exception e)
}
public
static espage searchdatapage
(string index, string type,
mapandparam,
maptimebetweenparam,
mapnumberbetweenparam,
mapinparam,
mapnotinparam,
maplikeparam,
string sortfield, string sortdirection,
integer currentpage, integer pagesize,
string highlightfield,
string queryfields)
throws exception ]條資料,處理資料條數[{}]"
, totalhits, length);if
(searchresponse.
status()
.getstatus()
==200
)return null;
}
private
static searchresponse getsearchresponse
( string index, string type,
mapandparam,
maptimebetweenparam,
mapnumberbetweenparam,
mapinparam,
mapnotinparam,
maplikeparam,
string sortfield, string sortdirection,
integer currentpage, integer pagesize,
string highlightfield,
string queryfields,
boolean i***port)
throws exception }}
//時間區間查詢
if(null != timebetweenparam && timebetweenparam.
size()
>0)
}}//數字區間查詢
if(null != numberbetweenparam && numberbetweenparam.
size()
>0)
}}//in查詢
if(null != inparam && inparam.
size()
>0)
}}//not in查詢
if(null != notinparam && notinparam.
size()
>0)
}}} boolquery.
filter
(infilter);}
//likeparam
if(null != likeparam && likeparam.
size()
>0)
}}} boolquery.
filter
(likefilter);}
// 高亮(***=111,aaa=222)
if(stringutils.
isnotempty
(highlightfield)
) searchrequestbuilder.
query
(boolquery)
;//只查詢某些字段
if(stringutils.
isnotempty
(queryfields)
) searchrequestbuilder.
fetchsource
(true);
//排序
if(stringutils.
isnotempty
(sortfield)
)else
if(null != i***port && i***port)
else
else
}//列印的內容 可以在 elasticsearch head 和 kibana 上執行查詢
log.
info
("\n{}"
, searchrequestbuilder)
; request.
source
(searchrequestbuilder)
; searchresponse searchresponse = client.
search
(request)
;return searchresponse;
}
private
static list
>
setsearchresponse
(searchresponse searchresponse, string highlightfield)
//遍歷 高亮結果集,覆蓋 正常結果集
searchhit.
getsourceasmap()
.put
(highlightfield, stringbuffer.
tostring()
);}}
sourcelist.
add(searchhit.
getsourceasmap()
);}return sourcelist;
}
es 父子查詢 es父子文件建立查詢
一 準備 1,elasticsearch 5.6.9 2,kibana 5.6.9 3,jdk1.8 二 建立索引,文件 1建立資料庫put database?pretty station stationname 三 填充資料 插入父文件一條記錄 插入id 1的6路post database lin...
ES查詢語句
1.萬用字元查詢keyword欄位 不會建分詞索引,會建索引 2.刪除並釋放磁碟空間 post monitor delete by query 1.查詢你要刪除的doc資料 以2019 5 18 00 00 00時間節點和time欄位為例 具體 如下 monitor search post 2.手動...
ES 常用查詢
1.term精確查詢,實際上是包含的意思 用法一 與bool,filter使用 get zf en search 用法二 直接term查詢 get zf en search 2.bulk 批量寫入,注意,必須指定 id,須換行 如果 id存在,執行的是update操作 3.組合查詢,bool 布林 ...