日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java多条件组合查询6_elasticsearch组合多条件查询实现restful api以及java代码实现

發布時間:2023/12/2 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多条件组合查询6_elasticsearch组合多条件查询实现restful api以及java代码实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

elasticsearch組合多條件查詢實現restful api以及java代碼實現

實際開發中,基本都是組合多條件查詢。

elasticsearch提供bool來實現這種需求;

主要參數:

must

文檔 必須 匹配這些條件才能被包含進來。

must_not

文檔 必須不 匹配這些條件才能被包含進來。

should

如果滿足這些語句中的任意語句,將增加 _score ,否則,無任何影響。它們主要用于修正每個文檔的相關性得分。

filter

必須 匹配,但它以不評分、過濾模式來進行。這些語句對評分沒有貢獻,只是根據過濾標準來排除或包含文檔。

OK我們這里多搞幾個實例讓大伙體驗下;

最簡單的 模糊查詢標題含有“戰”:

{

"query": {

"bool": {

"must":{"match":{"title":"戰"}}

}

}

}

多條件的話

{

"query": {

"bool": {

"must":[

{"match":{"title":"戰"}},

{"match":{"content":"星球"}}

]

}

}

}

就一條結果了;

java代碼實現:/**

*?多條件查詢

*?@throws?Exception

*/

@Test

public?void?searchMutil()throws?Exception{

SearchRequestBuilder?srb=client.prepareSearch("film").setTypes("dongzuo");

QueryBuilder?queryBuilder=QueryBuilders.matchPhraseQuery("title",?"戰");

QueryBuilder?queryBuilder2=QueryBuilders.matchPhraseQuery("content",?"星球");

SearchResponse?sr=srb.setQuery(QueryBuilders.boolQuery()

.must(queryBuilder)

.must(queryBuilder2))

.execute()

.actionGet();

SearchHits?hits=sr.getHits();

for(SearchHit?hit:hits){

System.out.println(hit.getSourceAsString());

}

}

運行結果:

ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...

{"title":"星球大戰8:最后的絕地武士","publishDate":"2018-01-05","content":"《星球大戰:最后的絕地武士》承接前作《星球大戰:原力覺醒》的劇情,講述第一軍團全面侵襲之下,蕾伊(黛西·雷德利 Daisy Ridley 飾)、芬恩(約翰·博耶加 John Boyega 飾)、波·達默龍(奧斯卡·伊薩克 Oscar Isaac 飾)三位年輕主角各自的抉 擇和冒險故事。前作中覺醒強大原力的蕾伊獨自尋訪隱居的絕地大師盧克·天行者(馬克·哈米爾 Mark Hamill 飾),在后者的指導下接受原力訓練。芬恩接受了一項幾乎不可能完成的任務,為此他不得不勇闖敵營,面對自己的過去。波·達默龍則要適應從戰士向領袖的角色轉換,這一過程中他也將接受一些血的教訓。","director":"萊恩·約翰遜","price":"55"}

must_not使用

內容里不含有“武士”

{

"query": {

"bool": {

"must":{"match":{"title":"戰"}},

"must_not":{"match":{"content":"武士"}}

}

}

}

結果:

java代碼實現:

/**

* 多條件查詢

* @throws Exception

*/

@Test

public void searchMutil2()throws Exception{

SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");

QueryBuilder queryBuilder=QueryBuilders.matchPhraseQuery("title", "戰");

QueryBuilder queryBuilder2=QueryBuilders.matchPhraseQuery("content", "武士");

SearchResponse sr=srb.setQuery(QueryBuilders.boolQuery()

.must(queryBuilder)

.mustNot(queryBuilder2))

.execute()

.actionGet();

SearchHits hits=sr.getHits();

for(SearchHit hit:hits){

System.out.println(hit.getSourceAsString());

}

}

結果一致;

should使用 提高得分;

前面:

{

"query": {

"bool": {

"must":[

{"match":{"title":"戰"}}

]

}

}

}

得分情況我們看下:

我們加下should

{

"query": {

"bool": {

"must":{"match":{"title":"戰"}},

"should":[

{"match":{"content":"星球"}},

{"range":{"publishDate":{"gte":"2018-01-01"}}}

]

}

}

}

執行下:

自己看得分 不解釋;

java代碼實現:/**

*?多條件查詢

*?@throws?Exception

*/

@Test

public?void?searchMutil3()throws?Exception{

SearchRequestBuilder?srb=client.prepareSearch("film").setTypes("dongzuo");

QueryBuilder?queryBuilder=QueryBuilders.matchPhraseQuery("title",?"戰");

QueryBuilder?queryBuilder2=QueryBuilders.matchPhraseQuery("content",?"星球");

QueryBuilder?queryBuilder3=QueryBuilders.rangeQuery("publishDate").gt("2018-01-01");

SearchResponse?sr=srb.setQuery(QueryBuilders.boolQuery()

.must(queryBuilder)

.should(queryBuilder2)

.should(queryBuilder3))

.execute()

.actionGet();

SearchHits?hits=sr.getHits();

for(SearchHit?hit:hits){

System.out.println(hit.getScore()+":"+hit.getSourceAsString());

}

}

執行:

省略

filter過濾;

票價必須少于40

{

"query": {

"bool": {

"must": {

"match": {"title": "戰"}

},

"filter": {

"range": {"price": {"lte":"40"}}

}

}

}

}

執行:

java代碼實現:/**

*?多條件查詢

*?@throws?Exception

*/

@Test

public?void?searchMutil4()throws?Exception{

SearchRequestBuilder?srb=client.prepareSearch("film").setTypes("dongzuo");

QueryBuilder?queryBuilder=QueryBuilders.matchPhraseQuery("title",?"戰");

QueryBuilder?queryBuilder2=QueryBuilders.rangeQuery("price").lte(40);

SearchResponse?sr=srb.setQuery(QueryBuilders.boolQuery()

.must(queryBuilder)

.filter(queryBuilder2))

.execute()

.actionGet();

SearchHits?hits=sr.getHits();

for(SearchHit?hit:hits){

System.out.println(hit.getSourceAsString());

}

}

運行結果一致;

總結

以上是生活随笔為你收集整理的java多条件组合查询6_elasticsearch组合多条件查询实现restful api以及java代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。