您好,登錄后才能下訂單哦!
這篇文章主要介紹“Lucene的搜索類型有哪些”,在日常操作中,相信很多人在Lucene的搜索類型有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Lucene的搜索類型有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
“ Lucene對于查詢的方式較多,可以實現TermQuery、BooleanQuery、PhraseQuery、 TermRangeQuery等一系列的基于不同類型的詞組的檢索。在進行查詢的時候可以選擇合適的查詢方式對文檔進行查詢。例如數值類型可以采用TermRangeQuery進行查詢。”
查詢方式大覽
TermQuery(詞條搜索) 詞條搜索,根據單個單詞進行查找的方式進行檢索,Term表示的是一個個的單詞,而在中文環境下則表示的是一個個的詞語(分詞后的詞語)。例如查詢標題中包含PHP的文檔。
Query query = new TermQuery(new Term("title","PHP"))
BooleanQuery(組合搜索) BooleanQuery是合并多個查詢條件的Query,例如合并TermQuery實現查詢 標題中包含PHP并且content中同樣包含PHP的文檔。
BooleanQuery query = new BoolQuery();
query.add(new TermQuery(new Term("title","PHP")));
query.add(new TermQuery(new Term("content","PHP")));
PhraseQuery(短語搜索) 短語查詢提供的是類似于多個關鍵詞的查詢,Term輸入的只有一個詞,而PhraseQuery查詢的是一組詞。例如查詢 PHP是世界上最好的語言 就會給予出相關的文檔。PhraseQuery同樣有一個比較特殊的地方,就是slop,slop是指兩個項之間允許的最大間隔。例如我們輸入的查詢條件為 世界,語言,可能中間缺少了 上、最好、的 就無法進行檢索。那么如果我們想要檢索到結果就需要設置slop。
PhraseQuery query = new PhraseQuery();
query.add(new Term("title","世界"));
query.add(new Term("title","語言"));
query.setslop(x); //允許的跨度或說間隔
PrefixQuery(前綴查詢) 前綴查詢,類似于我們常寫的SQL LIKE "PHP%"進行匹配查詢,簡單來說就是實現通過前綴的詞進行查詢
PrefixQuery query = new PhrefixQuery(new Term("title","PHP"));
FuzzyQuery(模糊查詢) 模糊查詢,它實現的是一種基于編輯距離相似度的檢索。編輯距離算法的大概意思就是一個詞組轉換到另一個詞組的最小距離。
FuzzyQuery query = new FuzzyQUery("title","PHP");
RegexpQuery(正則表達式查詢) 相信正則表達式大家都了解,Lucene實現正則表達式檢索是基于詞組的正則表達式檢索方式
RegexQuery query = new RegexQuery(new Term("title",".*PHP.*"));
TermRangeQuery() TermRangeQuery實現的是字符串的范圍查詢,那么既然是范圍同時有在字符串中進行范圍檢索的其實是檢索的ASCII碼值。但是其實中文場景中比較ASCII碼的場景不是很多。(我只用過正則匹配),可以大概的熟悉一下,構造函數為 TermRangeQuery(String field, String lowerTerm, String upperTerm, boolean includeLower, boolean includeUpper)
TermRangeQuery query = new TermRangeQuery("title","PHP","語言",true,false);
到此,關于“Lucene的搜索類型有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。