在ES(ElasticSearch)搜索引擎中,BoolQueryBuilder是一種非常有用的查詢構建器,可以快速而準確地構建複雜的查詢篩選條件,以實現高效的搜索。在本文中,將介紹如何使用BoolQueryBuilder來建立搜索查詢。
一、基本概念
在開始之前,讓我們來了解一些基本概念。在ES中,查詢分為兩個大類:一是結構化查詢,二是全文查詢。BoolQueryBuilder屬於結構化查詢構建器,用以編寫比較複雜和結構化的搜索查詢。它可以使用should、must、must_not以及filter等子句進行查詢構建和組合,從而達到滿足我們需求的目的。
其中,must表示必須匹配,should表示可以匹配,must_not表示不能匹配,filter表示過濾。比如,查詢詞語chocolate cake,我們可以這樣構建查詢子句:should加入chocolate和cake兩個詞語,使它們之間是or的關係,意味着這個文檔只要匹配了其中一個詞語就算作匹配成功。如果加上must,這就變成了and的關係,必須同時匹配成功才算匹配上。
二、語法格式
下面來看一下bool查詢的語法格式。它支持的查詢語句有must、must_not、should和filter。其中,filter用於過濾查詢,不參與評分(_score),因此相比其他查詢更加快速,適用於篩選數據。
{ "bool": { "must": [ { "match": { "title": "word1" }}, { "match": { "content": "word2 word3" }} ], "must_not": [ { "match": { "title": "word4" }} ], "should": [ { "match": { "title": "word5" }}, { "match": { "content": "word6" }} ], "filter": [ { "term": { "status": true }}, { "range": { "publish_date": { "gte": "2015-01-01" }}} ] } }
上面是一段bool查詢的例子。可以看到,must、must_not、should和filter中的每一個都是由一組查詢語句組成的數組。這些數組中的語句可以是任何有效的查詢類型,如match、term、range等。注意,如果一個查詢語句是包含多個關鍵詞,需要使用match語句。
三、示例代碼
下面通過一個示例代碼來演示如何使用BoolQueryBuilder。假設我們要查詢狀態為published、類型為article、包含word1和word2中任意一個的文章,並按照發布時間倒序排序。代碼如下:
SearchResponse response = client.prepareSearch("myindex") .setTypes("mytype") .setQuery(QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("status", "published")) .must(QueryBuilders.termQuery("type", "article")) .should(QueryBuilders.matchQuery("title", "word1")) .should(QueryBuilders.matchQuery("title", "word2")) .should(QueryBuilders.matchQuery("content", "word1")) .should(QueryBuilders.matchQuery("content", "word2")) .minimumShouldMatch(1) .filter(QueryBuilders.rangeQuery("publish_date") .from("2010-01-01") .to("2021-12-31"))) .addSort("publish_date", SortOrder.DESC) .execute() .actionGet();
代碼解析:
首先,我們使用prepareSearch方法來構建SearchRequestBuilder,設置所要查詢的索引和類型。然後,我們使用boolQuery方法來創建一個BoolQueryBuilder對象,用於創建查詢條件。在boolQuery中,我們添加多個不同類型的QueryBuilder查詢子句,使用must表示必須匹配,should表示可以匹配,minimumShouldMatch表示至少匹配一個詞語才算匹配成功,filter表示過濾條件。
最後,我們使用addSort方法來添加排序條件,按發布日期倒序排列。最後,我們使用execute方法對查詢進行執行,並得到查詢結果。
四、總結
通過本篇文章,我們了解了什麼是BoolQueryBuilder,介紹了bool查詢的語法格式,同時還演示了如何使用BoolQueryBuilder來構建查詢條件以及執行查詢操作。
總之,在使用BoolQueryBuilder時,要清楚自己所需要的查詢條件,按照需求使用must、must_not、should和filter等查詢語句進行組合。這樣能夠大大提高搜索的準確性和效率,提高系統的性能和用戶滿意度。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/311993.html