Lucene知識小總結6:搜索

建好索引以後一定是進行搜索的節奏了,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

相關文章
相關標籤/搜索