springboot elasticsearch CRUD+

springboot elasticsearch CRUD+


java版本:1.8


elasticSearch官網(wǎng)是比任何其他博客都正規(guī)的學(xué)習(xí)平臺

https://www.elastic.co/cn/elasticsearch/

教學(xué)地址

https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html


我的項目是下載了elastic冷守,本地運行自己玩

https://blog.csdn.net/aabbyyz/article/details/83722462?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162806535316780269891791%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162806535316780269891791&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-83722462.first_rank_v2_pc_rank_v29&utm_term=elasticsearch%E4%B8%8B%E8%BD%BD&spm=1018.2226.3001.4187

Staff

@Document(indexName="department")

publicclassStaff{

@Id

privateStringid;

@Field

privateStringfirstName;

@Field

privateStringlastName;

@Field

privateIntegerage=0;

@Field

privateStringabout;

publicStringgetId() {

returnid;

?? }

publicvoidsetId(Stringid) {

this.id=id;

?? }

publicStringgetFirstName() {

returnfirstName;

?? }

publicvoidsetFirstName(StringfirstName) {

this.firstName=firstName;

?? }

publicStringgetLastName() {

returnlastName;

?? }

publicvoidsetLastName(StringlastName) {

this.lastName=lastName;

?? }

publicIntegergetAge() {

returnage;

?? }

publicvoidsetAge(Integerage) {

this.age=age;

?? }

publicStringgetAbout() {

returnabout;

?? }

publicvoidsetAbout(Stringabout) {

this.about=about;

?? }

}

[@Document(indexName = "department")]?index名役电,文件名設(shè)置為department

StaffController

@RestController

@RequestMapping("/elasticSearch")

publicclassStaffController{

@Autowired

privateStaffNewServicestaffNewService;

@ResponseBody

@GetMapping("/saveStaff")

publicStringsaveStaff(@RequestBodyStaffstaff){

staffNewService.saveStaff(staff);

return"saved";

?? }

@ResponseBody

@RequestMapping("/deleteStaff")

publicStringdeleteStaff(@RequestParamStringid){

staffNewService.deleteStaff(id);

return"deleted";

?? }

@ResponseBody

@RequestMapping("/updateStaff")

publicStringupdateStaff(@RequestParamStringid,@RequestParamStringfirstName){

staffNewService.updateStaff(id,firstName);

return"updated";

?? }

//以下都是按照firstName搜索

@ResponseBody

@RequestMapping("/matchAllQuery")//搜索該field(索引)內(nèi)全部信息

publicStringmatchAllQuery(@RequestParamStringfield)throwsIOException{

SearchResponsesearchResponse=staffNewService.matchAllQuery(field);

return"matchAllQuery"+searchResponse;

?? }

@ResponseBody

@RequestMapping("/regexpQuery")//以一句話里的單詞為關(guān)鍵字查詢該句話,不能以一個單詞里的幾個字母作為關(guān)鍵字搜索該詞伟众。這就和mongo里的regex不一樣理张,它能做后者赫蛇。

publicStringregexpQuery(@RequestParamStringfield,@RequestParamStringkeyword)throwsIOException{

SearchResponsesearchResponse=staffNewService.regexpQuery(field,keyword);

return"regexpQuery"+searchResponse;

?? }

@ResponseBody

@RequestMapping("/fuzzyQuery")//首先,他會把我正確的keyword全改成小寫雾叭,兩個字符出錯

// (漏了悟耘,多了,i變j了织狐,只要總數(shù)是2以內(nèi))就查得出來暂幼,多了不行

publicStringfuzzyQuery(@RequestParamStringfield,@RequestParamStringkeyword)throwsIOException{

SearchResponsesearchResponse=staffNewService.fuzzyQuery(field,keyword);

return"fuzzyQuery"+searchResponse;

?? }

@ResponseBody

@RequestMapping("/termQuery")//如果正確的沒空格,也是先會把我正確的keyword變成小寫移迫,再搜索旺嬉,要完全一樣才行

// 如果原來的有空格,搜索第一串字符串才能搜出來(還是小寫厨埋,即使正確的是大寫)

publicStringtermQuery(@RequestParamStringfield,@RequestParamStringkeyword)throwsIOException{

SearchResponsesearchResponse=staffNewService.termQuery(field,keyword);

return"termQuery"+searchResponse;

?? }

@ResponseBody

@RequestMapping("/matchQuery")//大小寫隨便,空格不能漏

publicStringmatchQuery(@RequestParamStringfield,@RequestParamStringkeyword)throwsIOException{

SearchResponsesearchResponse=staffNewService.matchQuery(field,keyword);

return"matchQuery"+searchResponse;

?? }

}

StaffRepository(基本用不到)

@Component

publicinterfaceStaffRepositoryextendsElasticsearchRepository<Staff,String>{

/**

* 根據(jù)ID 查詢員工信息

*

* @param id id

* @return Staff

*/

StaffqueryStaffById(Stringid);

}

StaffNewService

@Service

@Component

publicinterfaceStaffNewService{

/**

* 新增員工測試

*

* @return String

*/

publicvoidsaveStaff(Staffstaff) ;

/**

* 刪除測試

*

* @return

*/

publicvoiddeleteStaff(Stringid) ;

/**

* 更新

* @return

*/

publicvoidupdateStaff(Stringid,StringfirstName) ;

/**

* 查詢

* @return

*/

publicvoidqueryStaff(Stringid) ;

publicSearchResponsematchAllQuery(Stringfield)throwsIOException;

publicSearchResponseregexpQuery(Stringfield,Stringkeyword)throwsIOException;

publicSearchResponsefuzzyQuery(Stringfield,Stringkeyword)throwsIOException;

publicSearchResponsetermQuery(Stringfield,Stringkeyword)throwsIOException;

publicSearchResponsematchQuery(Stringfield,Stringkeyword)throwsIOException;

}

StaffNewServiceImpl

@Service

@Component

publicclassStaffNewServiceImplimplementsStaffNewService{

@Autowired

privateStaffRepositorystaffRepository;

@Resource

privateElasticsearchRestTemplateelasticsearchRestTemplate;

/**

* 新增員工測試

*

* @return String

*/

publicvoidsaveStaff(Staffstaff) {

staffRepository.save(staff);

?? }

/**

* 刪除測試

*

* @return

*/

publicvoiddeleteStaff(Stringid) {

Staffstaff=staffRepository.queryStaffById(id);

staffRepository.delete(staff);

?? }

/**

* 更新

* @return

*/

publicvoidupdateStaff(Stringid,StringfirstName) {

Staffstaff=staffRepository.queryStaffById(id);

staff.setFirstName(firstName);

staffRepository.save(staff);

?? }

/**

* 查詢

* @return

*/

publicvoidqueryStaff(Stringid) {

Staffstaff=staffRepository.queryStaffById("1");

?? }

publicSearchResponsematchAllQuery(Stringfield)throwsIOException{

RestHighLevelClientclient=newRestHighLevelClient(RestClient.builder(

newHttpHost("127.0.0.1",9200,"http")));

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.matchAllQuery());

SearchRequestsearchRequest=newSearchRequest();

searchRequest.indices(field);

searchRequest.source(searchSourceBuilder);

SearchResponsesearchResponse=client.search(searchRequest,RequestOptions.DEFAULT);

returnsearchResponse;

?? }

/**

*? 帶分頁邪媳、權(quán)重、分域查詢

* @param field 索引

* @param keyword 關(guān)鍵字

* @return staff集合

*/

publicSearchResponseregexpQuery(Stringfield,Stringkeyword)throwsIOException{

RestHighLevelClientclient=newRestHighLevelClient(RestClient.builder(

newHttpHost("127.0.0.1",9200,"http")));

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.regexpQuery("firstName",keyword));

SearchRequestsearchRequest=newSearchRequest();

searchRequest.indices(field);

searchRequest.source(searchSourceBuilder);

SearchResponsesearchResponse=client.search(searchRequest,RequestOptions.DEFAULT);

returnsearchResponse;

?? }

publicSearchResponsefuzzyQuery(Stringfield,Stringkeyword)throwsIOException{

RestHighLevelClientclient=newRestHighLevelClient(RestClient.builder(

newHttpHost("127.0.0.1",9200,"http")));

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.fuzzyQuery("firstName",keyword));

SearchRequestsearchRequest=newSearchRequest();

searchRequest.indices(field);

searchRequest.source(searchSourceBuilder);

SearchResponsesearchResponse=client.search(searchRequest,RequestOptions.DEFAULT);

returnsearchResponse;

?? }

publicSearchResponsetermQuery(Stringfield,Stringkeyword)throwsIOException{

RestHighLevelClientclient=newRestHighLevelClient(RestClient.builder(

newHttpHost("127.0.0.1",9200,"http")));

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.termQuery("firstName",keyword));

SearchRequestsearchRequest=newSearchRequest();

searchRequest.indices(field);

searchRequest.source(searchSourceBuilder);

SearchResponsesearchResponse=client.search(searchRequest,RequestOptions.DEFAULT);

returnsearchResponse;

?? }

publicSearchResponsematchQuery(Stringfield,Stringkeyword)throwsIOException{

RestHighLevelClientclient=newRestHighLevelClient(RestClient.builder(

newHttpHost("127.0.0.1",9200,"http")));

SearchSourceBuildersearchSourceBuilder=newSearchSourceBuilder();

searchSourceBuilder.query(QueryBuilders.matchQuery("firstName",keyword));

SearchRequestsearchRequest=newSearchRequest();

searchRequest.indices(field);

searchRequest.source(searchSourceBuilder);

SearchResponsesearchResponse=client.search(searchRequest,RequestOptions.DEFAULT);

returnsearchResponse;

?? }

}

[HttpHost]?程序里生成客戶端,這樣不需要加什么插件就能讀取elastic里的索引雨效,文件了套菜。

DemoApplication

@Service

@SpringBootApplication

publicclassDemoApplication{

publicstaticvoidmain(String[]args){

SpringApplication.run(DemoApplication.class,args);

?? }

}

application.properties

#ES

spring.data.elasticsearch.repositories.enabled=true

spring.data.elasticsearch.cluster-nodes=127.0.0.1:9200

本地程序運行端口默認是8080,所以postman調(diào)用接口時的端口時8080设易。

但是elasticSearch默認是在9200運行的逗柴。

不要搞混!6俜巍戏溺!

我就主要玩了一下searchSourceBuilder里的各種query,aggregation好像主要做的是數(shù)據(jù)統(tǒng)計屠尊,這個我沒玩旷祸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者讼昆。
  • 序言:七十年代末托享,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子浸赫,更是在濱河造成了極大的恐慌闰围,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件既峡,死亡現(xiàn)場離奇詭異羡榴,居然都是意外死亡,警方通過查閱死者的電腦和手機运敢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門校仑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人传惠,你說我怎么就攤上這事迄沫。” “怎么了卦方?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵羊瘩,是天一觀的道長。 經(jīng)常有香客問我愿汰,道長困后,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任衬廷,我火速辦了婚禮摇予,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吗跋。我一直安慰自己侧戴,他們只是感情好宁昭,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酗宋,像睡著了一般积仗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜕猫,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天寂曹,我揣著相機與錄音,去河邊找鬼回右。 笑死隆圆,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的翔烁。 我是一名探鬼主播渺氧,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蹬屹!你這毒婦竟也來了侣背?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤慨默,失蹤者是張志新(化名)和其女友劉穎贩耐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體业筏,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡憔杨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蒜胖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡抛蚤,死狀恐怖台谢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情岁经,我是刑警寧澤朋沮,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站缀壤,受9級特大地震影響樊拓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜塘慕,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一筋夏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧图呢,春花似錦条篷、人聲如沸骗随。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸿染。三九已至,卻和暖如春乞巧,著一層夾襖步出監(jiān)牢的瞬間涨椒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工绽媒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丢烘,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓些椒,卻偏偏與公主長得像播瞳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子免糕,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容