封裝es查詢

2021-10-10 22:17:40 字數 3895 閱讀 3482

快速實現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 布林 ...