spring boot+elasticsearch 查詢功能筆記(一)

這段時(shí)間要寫一個(gè)提供查詢elasticsearch的接口,特在這里講自己的一些問題情況記錄一下悬垃。

首先是創(chuàng)建工程拔鹰,spring boot+ES的這里就不過多的寫了。

pom文件如下:

在application.properties中添加配置:

server.port=8083

spring.data.elasticsearch.cluster-name=這里是ES的名稱

spring.data.elasticsearch.cluster-nodes=這里是ES的地址以及端口號(hào)

spring.data.elasticsearch.repositories.enabled=true


這里使用的是spring-data-elasticsearch涣觉,所以在Dao中只要繼承ElasticsearchRepository就可以了痴荐。

例如:public interface Mf_cus_customerRepository extends ElasticsearchRepository<Mf_cus_customer,String> {}

這篇文章主要是記錄查詢的一些方法,所以只針對(duì)查詢官册。

使用QueryBuilder來創(chuàng)建查詢

1生兆、單字段匹配(單條)

/**

* 單字段匹配查詢

* @param searchContent

* @return

*/

public List<Mf_cus_customer> test_search(String searchContent){

QueryBuilder queryBuilder = QueryBuilders.termQuery("這里是你要查詢的字段", searchContent);

? ? SearchQuery searchQuery =new NativeSearchQueryBuilder().withQuery(queryBuilder).build();

? ? System.out.println("查詢的語句:" + searchQuery.getQuery().toString());

? ? Page<Mf_cus_customer>?searchPageResults =mfCusCustomerRepository.search(searchQuery);

? ? return searchPageResults.getContent();

}

這里要注意的是QueryBuilders的termQuery方法以及matchQuery方法,這兩個(gè)方法都可以進(jìn)行單字段匹配的查詢膝宁,但是這兩個(gè)是有區(qū)別的鸦难。具體區(qū)別原理還沒有學(xué)習(xí)根吁,但是如果你的字段不是一個(gè)整體(類似cus_name)這樣的就需要使用matchQuery或者是termQuery的第一個(gè)參數(shù)也就是你的字段后面加上.keyword。也就是說如果字段是一個(gè)整體那么這兩個(gè)方法是一樣的效果合蔽,例如:

matchQuery("name","張三")等價(jià)于termQuery("name","張三")击敌。如果字段不是一個(gè)整體,那么這兩個(gè)的效果如下:

matchQuery("cus_name","張三")等價(jià)于termQuery("cus_name.keyword","張三")拴事。

2沃斤、單字段匹配(多條)

/**

* 一次匹配多個(gè)值

* @param searchContent

* @return

*/

public List<Mf_cus_customer> test_searchs(String searchContent){

List searchContents = Arrays.asList(searchContent.split(","));

? ? QueryBuilder queryBuilder = QueryBuilders.termsQuery("cus_no.keyword", searchContents);//cus_no字段查詢

? ? SearchQuery searchQuery =new NativeSearchQueryBuilder().withQuery(queryBuilder).build();

? ? System.out.println("查詢的語句:" + searchQuery.getQuery().toString());

? ? Page<Mf_cus_customer> searchPageResults =mfCusCustomerRepository.search(searchQuery);

? ? return searchPageResults.getContent();

}

匹配多條使用的是termsQuery方法,問題同上刃宵。

3轰枝、分頁

分頁的話這里是用的是簡單的方法,后期學(xué)到其他分頁還會(huì)繼續(xù)分享组去。

這里的分頁使用的是Pageable鞍陨,例如:

Pageable pageable =new PageRequest(pageNumber, pageSize);

然后在new?NativeSearchQueryBuilder()后添加withPageable(pageable?)即可。

/**

* 有分頁的按照userID查詢

* @param pageNumber

* @param pageSize

* @param searchContent

* @return

*/

public List<Mf_cus_customer> _searchByUserid(Integer pageNumber, Integer pageSize,String searchContent){

Pageable pageable =new PageRequest(pageNumber, pageSize);

? ? QueryStringQueryBuilder builder =new QueryStringQueryBuilder(searchContent);

? ? SearchQuery searchQuery =new NativeSearchQueryBuilder().withPageable(pageable).withQuery(builder).build();

? ? System.out.println("查詢的語句:" + searchQuery.getQuery().toString());

? ? Page<Mf_cus_customer> searchPageResults =mfCusCustomerRepository.search(searchQuery);

? ? return searchPageResults.getContent();

}

4从隆、范圍查詢

使用QueryBuilders的rangeQuery方法诚撵,來進(jìn)行范圍查詢,其中

大于:QueryBuilder qb1 = QueryBuilders.rangeQuery("字段").gt(值);

大于等于:QueryBuilder qb1 = QueryBuilders.rangeQuery("字段").gte(值);

小于:QueryBuilder qb1 = QueryBuilders.rangeQuery("字段").lt(值);

小于等于:QueryBuilder qb1 = QueryBuilders.rangeQuery("字段").lte(值);

5键闺、多條件查詢

使用QueryBuilders的boolQuery方法可以進(jìn)行多條件查詢寿烟,即sql語句中的and和or查詢

這里and是must(),or是should()辛燥;

例如:

QueryBuilder qb1 = QueryBuilders.termsQuery("字段", 值);

QueryBuilder qb2 = QueryBuilders.rangeQuery("字段").gt(值);

QueryBuilder qb3 = QueryBuilders.boolQuery().must(qb1).must(qb2);//and鏈接兩個(gè)查詢條件筛武,or的話使用should()。

這些是簡單查詢的部分功能挎塌,在項(xiàng)目中用到了徘六,后續(xù)如果有其他的使用會(huì)繼續(xù)記錄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末榴都,一起剝皮案震驚了整個(gè)濱河市待锈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嘴高,老刑警劉巖竿音,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拴驮,居然都是意外死亡春瞬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門套啤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宽气,“玉大人,你說我怎么就攤上這事∧ㄖ瘢” “怎么了线罕?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵止潮,是天一觀的道長窃判。 經(jīng)常有香客問我,道長喇闸,這世上最難降的妖魔是什么袄琳? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮燃乍,結(jié)果婚禮上唆樊,老公的妹妹穿的比我還像新娘。我一直安慰自己刻蟹,他們只是感情好逗旁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舆瘪,像睡著了一般片效。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上英古,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天淀衣,我揣著相機(jī)與錄音,去河邊找鬼召调。 笑死膨桥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的唠叛。 我是一名探鬼主播只嚣,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼艺沼!你這毒婦竟也來了介牙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤澳厢,失蹤者是張志新(化名)和其女友劉穎环础,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剩拢,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡线得,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了徐伐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贯钩。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出角雷,到底是詐尸還是另有隱情祸穷,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布勺三,位于F島的核電站雷滚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吗坚。R本人自食惡果不足惜祈远,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望商源。 院中可真熱鬧车份,春花似錦、人聲如沸牡彻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庄吼。三九已至缎除,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霸褒,已是汗流浹背伴找。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留废菱,地道東北人技矮。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像殊轴,于是被迫代替她去往敵國和親衰倦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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