建好索引以後一定是進行搜索的節奏了,lucene關於搜索這部份內容是包含不少知識的,這裏只是一個梗概,由於做爲知識點的小梳理,沒有探討高級的知識點,都是先對知識有個小印象,以後慢慢學習吧。java
一、搜索操做數組
public void search01() { try { IndexReader reader = IndexReader.open(directory); IndexSearcher searcher = new IndexSearcher(reader); TermQuery query = new TermQuery(new Term("email","test0@test.com")); TopDocs tds = searcher.search(query, 10); for(ScoreDoc sd:tds.scoreDocs) { Document doc = searcher.doc(sd.doc); System.out.println("("+sd.doc+"-"+doc.getBoost()+"-"+sd.score+")"+ doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+ doc.get("attach")+","+doc.get("date")+","+doc.getValues("email")[1]); } reader.close(); } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void search02() { try { IndexSearcher searcher = getSearcher(); TermQuery query = new TermQuery(new Term("content","like")); TopDocs tds = searcher.search(query, 10); for(ScoreDoc sd:tds.scoreDocs) { Document doc = searcher.doc(sd.doc); System.out.println(doc.get("id")+"---->"+ doc.get("name")+"["+doc.get("email")+"]-->"+doc.get("id")+","+ doc.get("attach")+","+doc.get("date")+","+doc.getValues("email")[1]); } searcher.close(); } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
二、操做結果截圖學習
三、TopDocs、ScoreDoc這個傢伙是幹什麼的呢?
(如下摘自《Lucene 實戰》)spa
當你查詢lucene索引時,它將返回一個包含有序的ScoreDoc對象數組的TopDocs對象。在輸入查詢後,Lucene會爲每一個文檔計算評分(用以表示相關性的數值)。ScoreDoc對象自身並不會進行實際文檔的匹配操做,而是由程序經過整型文檔id來進行匹配的。在大多數展示搜索結果的應用程序中,用戶只會訪問最靠前的幾個文檔,所以咱們沒有必要提供對全部搜索結果文檔的檢索。【即searcher.doc(sd.doc)纔是真正加載文檔】code
四、接下來Debug一下代碼,看看這兩個傢伙到底裏面藏了什麼東東對象
(注:本人是小白中的戰鬥機,下面內容老手見到一定唾沫橫飛,非小白者自動躲離)索引
我在search02進行斷點,這個返回的結果較多,可能更好的觀察文檔
以上,大概知道lucene搜索的大概流程,固然這僅僅是小屁程序,可是瞭解大概接着學下去也不會那麼一頭霧水了,慢慢學習積累吧,藉此勉勵一下本身get