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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【全文搜索引擎】Elasticsearch之模糊查询

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【全文搜索引擎】Elasticsearch之模糊查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

wildcard查詢

通配符查詢允許我們在查詢值中使用*和?等通配符。此外,通配符查詢跟詞條查詢在內容方面非常類似。可以發送一下查詢,來匹配所有包含cr?me詞條的文檔,這里?表示任意字符:

{"query" : {"wildcard" : {"title" : "cr?me"}} }

這將匹配title字段中包含與cr?me匹配的詞條的所有文檔。然后,還可以在通配符查詢中包含加權屬性;它將影響每個與給定值匹配的詞條的重要性。如果要改變之前的查詢,給它一個20.0的加權,可以發出以下查詢:

{"query" : {"wildcard" : {"title" : {"value" : "cr?me","boost" : 20.0}}} }

注意,通配符查詢不太注重性能,在可能時應盡量避免,特別是要避免前綴通配符(以通配符開始的詞條)。此外,請注意Elasticsearch會重寫通配符查詢,因此Elasticsearch允許通過一個額外的參數控制重寫方法。

代碼實現:
GET goods/_search {"query" : {"wildcard" : {"brandName" : {"value" : "華*",}}} }
java代碼
/*** 模糊查詢:WildcardQuery*/ @Test public void testWildcardQuery() throws IOException {// 構建查詢請求對象,指定查詢的索引名稱SearchRequest searchRequest = new SearchRequest("goods");// 創建查詢條件構建器SearchSourceBuilderSearchSourceBuilder sourceBulider = new SearchSourceBuilder();// 查詢條件WildcardQueryBuilder query = QueryBuilders.wildcardQuery("title", "華*");// 指定查詢條件sourceBulider.query(query);// 添加查詢條件構建器 SearchSourceBuildersearchRequest.source(sourceBulider);// 查詢,獲取查詢結果SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);// 獲取命中對象 SearchHitsSearchHits searchHits = searchResponse.getHits();//獲取記錄數long value = searchHits.getTotalHits().value;System.out.println("總記錄數:"+value);List<Goods> goodsList = new ArrayList<>();// 獲取Hits數據 數組SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {// 獲取json字符串格式的數據String sourceAsString = hit.getSourceAsString();//轉為javaGoods goods = JSON.parseObject(sourceAsString, Goods.class);goodsList.add(goods);}for (Goods goods : goodsList) {System.out.println(goods);} }

regexp查詢

通過正則表達式查詢,可以使用正則表達式來查詢文本。請記住,此類查詢的性能取決于所選的正則表達式。如果我們的正則表達式匹配許多詞條,查詢將很慢。一般規則是,正則表達式匹配的詞條數越高,查詢越慢。
正則表達式查詢示例如下所示:

{"query" : {"regexp" : {"title" : {"value" : "cr.m[ae]","boost" : 10.0}}} }

上述查詢將被Elasticsearch重寫成若干個詞條查詢,根據索引中匹配給定正則表達式的內容。查詢中加權參數指定了生成的查詢將使用的加權值。

代碼實現:
GET goods/_search {"query" : {"regexp" : {"title" : {"value" : "\\w+(.)*",}}} }
java代碼
/*** 模糊查詢:regexpQuery*/ @Test public void testRegexpQuery() throws IOException {// 構建查詢請求對象,指定查詢的索引名稱SearchRequest searchRequest = new SearchRequest("goods");// 創建查詢條件構建器SearchSourceBuilderSearchSourceBuilder sourceBulider = new SearchSourceBuilder();// 查詢條件RegexpQueryBuilder query = QueryBuilders.regexpQuery("title", "\\w+(.)*");// 指定查詢條件sourceBulider.query(query);// 添加查詢條件構建器 SearchSourceBuildersearchRequest.source(sourceBulider);// 查詢,獲取查詢結果SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);// 獲取命中對象 SearchHitsSearchHits searchHits = searchResponse.getHits();//獲取記錄數long value = searchHits.getTotalHits().value;System.out.println("總記錄數:"+value);List<Goods> goodsList = new ArrayList<>();// 獲取Hits數據 數組SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {// 獲取json字符串格式的數據String sourceAsString = hit.getSourceAsString();// 轉為javaGoods goods = JSON.parseObject(sourceAsString, Goods.class);goodsList.add(goods);}for (Goods goods : goodsList) {System.out.println(goods);} }

prefix查詢

前綴查詢在配置方面來說跟詞條查詢類似。前綴查詢能讓我們匹配這樣的文檔:它們的特定字段以給定的前綴開始。例如,想找到所有title字段以cri開始的文檔,可以運行以下查詢:

{"query" : {"prefix" : {"title" : "cri"}} }

與詞條查詢類似,還可以在前綴查詢中包含加權屬性;這將影響到給定前綴的重要性。例如,改變之前的查詢,并給它增加3.0的加權,發出以下查詢:

{"query" : {"prefix" : {"title" : {"value" : "cri","boost" : 3.0}}} }

Elasticsearch會把前綴查詢重寫,也允許我們傳遞額外的參數來控制重寫方法。

代碼實現:
GET goods/_search {"query" : {"prefix" : {"title" : {"value" : "華",}}} }
java代碼
/*** 模糊查詢:perfixQuery*/ @Test public void testPrefixQuery() throws IOException {// 構建查詢請求對象,指定查詢的索引名稱SearchRequest searchRequest = new SearchRequest("goods");// 創建查詢條件構建器SearchSourceBuilderSearchSourceBuilder sourceBulider = new SearchSourceBuilder();// 查詢條件PrefixQueryBuilder query = QueryBuilders.prefixQuery("brandName", "三");// 指定查詢條件sourceBulider.query(query);// 添加查詢條件構建器 SearchSourceBuildersearchRequest.source(sourceBulider);// 查詢,獲取查詢結果SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);// 獲取命中對象 SearchHitsSearchHits searchHits = searchResponse.getHits();//獲取記錄數long value = searchHits.getTotalHits().value;System.out.println("總記錄數:"+value);List<Goods> goodsList = new ArrayList<>();// 獲取Hits數據 數組SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {//獲取json字符串格式的數據String sourceAsString = hit.getSourceAsString();//轉為javaGoods goods = JSON.parseObject(sourceAsString, Goods.class);goodsList.add(goods);}for (Goods goods : goodsList) {System.out.println(goods);} }

總結

以上是生活随笔為你收集整理的【全文搜索引擎】Elasticsearch之模糊查询的全部內容,希望文章能夠幫你解決所遇到的問題。

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