91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

lucene4.7正則查詢怎么實現

發布時間:2021-12-23 09:15:30 來源:億速云 閱讀:135 作者:iii 欄目:互聯網科技

這篇文章主要講解了“lucene4.7正則查詢怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“lucene4.7正則查詢怎么實現”吧!

lucene內置了許多的查詢API,以及更強大的自定義查詢方式的QueryParse,大部分情況下我們使用內置的查詢API,基本上就可以滿足我們的需求了,但是如果你想更靈活的定制自己的查詢或者改寫自己的查詢API那么你完全可以繼承QueryParse類來完成這項工作。 

從某種方式上來說,正則查詢(RegexpQuery)跟通配符查詢(WildcardQuery)的功能很相似,因為他們都可以完成一樣的工作,但是不同的是正則查詢支持更靈活定制細化查詢,這一點與通配符的泛化是不一樣的,而且正則查詢天生支持使用強大的正則表達式的來準確匹配一個或幾個term,需要注意的是,使用正則查詢的字段最好是不分詞的,因為分詞的字段可能會導致邊界問題,從而使查詢失敗,得不到任何結果,這一點和WildcardQuery效果是一樣的。 

下面先來看一下,散仙的測試數據,為了看出分詞與不分詞給查詢造成的影響,散仙的用同樣的內容做測試,分詞工具使用的是IK的分詞器,截圖如下: 

lucene4.7正則查詢怎么實現

在上圖中,散仙使用2個字段存儲一樣的內容,一個是分過詞的,一個沒分過詞的,下面給出使用正則查詢的核心代碼:

 RegexpQuery query=new RegexpQuery(new Term(field, ".*"+searchStr+".*"));
                  // System.out.println(query.toString());
                  TopDocs s=search.search(query,null, 100);
                //  TopDocs s=search.search(bool,null, 100);
                   System.out.println(s.totalHits);
                  for(ScoreDoc ss:s.scoreDocs){
                         
                         Document docs=search.doc(ss.doc);
                         System.out.println("id=>"+docs.get("id")+"   name==>"+docs.get("bookName")+"   author==>"+docs.get("author"));
                    // System.out.println(docs.get(field));
                     }

下面我們先來測,對不分詞的字段的做模糊查詢,測試的代碼如下:

 dao.testRegQuery("bookName","并發");

結果如下:

命中數據 :2
id=>2   name==>并發數據挑戰面臨巨大的挑戰   author==>并發數據挑戰面臨巨大的挑戰
id=>4   name==>我們的并發數量并秦東亮在不不是很大   author==>我們的并發數量并秦東亮在不不是很大

我們發現它很出色完成了模糊的查詢,并且耗時比通配符查詢同樣的查詢條件的耗時要少,下面我們對分詞的字段,進行檢索,測試代碼如下:

 dao.testRegQuery("author","并發");

結果如下:

命中數據 :3
id=>2   name==>并發數據挑戰面臨巨大的挑戰   author==>并發數據挑戰面臨巨大的挑戰
id=>3   name==>the food is perfect!   author==>我們的并發數量并不是很大
id=>4   name==>我們的并發數量并秦東亮在不不是很大   author==>我們的并發數量并秦東亮在不不是很大

我們發現對分詞字段的模糊匹配,也同樣沒問題,下面我們來測下對分詞字段的邊界查詢。代碼如下:

 dao.testRegQuery("bookName","e q");
         dao.testRegQuery("bookName","量并");
         System.out.println("===========對比界限=============");
         dao.testRegQuery("author","e q");
         dao.testRegQuery("author","量并");

結果如下:

命中數據 :1
id=>1   name==>the quick brown fox jumps over the lazy dog   author==>the quick brown fox jumps over the lazy dog
命中數據 :1
id=>4   name==>我們的并發數量并秦東亮在不不是很大   author==>我們的并發數量并秦東亮在不不是很大
===========對比界限=============
命中數據 :0
命中數據 :0

由以上結果,我們可以發現分詞后的字段,如果在某個字之間被切分成兩個term,那么無論你用什么樣的方式模糊這兩個term邊界之間的數據,都查詢不到任何結果,而不分詞的字段,卻能查出來,這是因為,不分詞的字段都是作為一個單獨的term來處理的,來lucene的內部匹配方式,恰恰又是以term作為最小檢索單位的,故能檢索到結果,這一點需要我們格外注意,在實現我們的業務時,要根據自己的場景來設計出最優的分詞策略。

下面散仙要測的是正則查詢的老本行了,使用正則表達式進行查詢,代碼如下:

     dao.testRegQuery("bookName","[fb]ox");//利用正則式檢索

結果如下:

命中數據 :2
id=>1   name==>the quick brown fox jumps over the lazy dog   author==>the quick brown fox jumps over the lazy dog
id=>5   name==>log is small box   author==>log is small box

感謝各位的閱讀,以上就是“lucene4.7正則查詢怎么實現”的內容了,經過本文的學習后,相信大家對lucene4.7正則查詢怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扶沟县| 区。| 康定县| 平原县| 瓦房店市| 云霄县| 中西区| 上杭县| 安庆市| 武隆县| 高邑县| 泰宁县| 寻乌县| 南召县| 开阳县| 当雄县| 印江| 舒城县| 宣恩县| 阳山县| 息烽县| 独山县| 龙里县| 平原县| 勃利县| 饶阳县| 陕西省| 上栗县| 磐安县| 吴桥县| 大竹县| 固阳县| 简阳市| 晋州市| 宁南县| 陈巴尔虎旗| 苗栗县| 明光市| 咸丰县| 巴东县| 黄龙县|