lucene學習-建立索引

   本文的lucene是基於lucene3.5版本.java

   使用lucene實現搜索引擎開發,核心的部分是創建索引和搜索。本節主要是記錄建立索引部分的內容。app

   建立的索引結構如圖所示。搜索引擎

   

 

建立索引的步驟分爲如下幾個步驟:orm

一、創建索引器IndexWriter對象

二、建立文檔對象Documentblog

三、創建信息對象字段Field索引

四、將Field對象添加到Document內存

五、將Document對象添加到IndexWriter對象中開發

下面簡要介紹幾個核心對象。文檔

(1)、建立IndexWriter對象。

IndexWriter writer=new IndexWriter(directory, iwc)。

directory是建立的索引要保存的路徑,若是要保存在硬盤中則使用Directory directory = FSDirectory.open(new File(path))建立一個directory對象。

若是要保存在內存中則使用:RAMDirectory directory=new RAMDirectory()建立一個directory對象。

(2)、建立Document對象。

Document doc =new Document();建立了一個不含有任何Field的空Document,若是要要Field添加到Document中,則使用add(Field)方法便可實現。

doc.add(field)。

(3)、建立Field對象。

Field field=new Field(Field名稱,Field內容,存儲方式,索引方式);

存儲方式分爲3種:一、徹底存儲(Field.Store.YES);二、不存儲(Field.Store.NO);三、壓縮存儲(Field.Store.COMPRESS)。

索引方式分爲4種:一、不索引(Field.Index.NO);二、 Field.Index.ANALYZED ;三、 Field.Index.NOT_ANALYZED;四、Field.Index.NOT_ANALYZED_NO_NORMS

建立一個簡單的索引程序代碼以下所示:

public void Index() {
		String[] ids = { "1", "2", "3", "4" };
		String[] names = { "aa", "bb", "cc", "dd" };
		String[] contents = {
				"Using AbstractJExcelView to export data to Excel file via JExcelAPI library",
				"Using AbstractPdfView to export data to Pdf file via Bruno Lowagie’s iText library. ",
				"Example to integrate Log4j into the Spring MVC application. ",
				"Using Hibernate validator (JSR303 implementation) to validate bean in Spring MVC. " };
		IndexWriter writer = null;
		try {
			Directory directory = FSDirectory.open(new File(path));
			// RAMDirectory directory=new RAMDirectory();
			IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35,
					new StandardAnalyzer(Version.LUCENE_35));
			writer = new IndexWriter(directory, iwc);
			Document doc = null;
			for (int i = 0; i < ids.length; i++) {
				doc = new Document();
				doc.add(new Field("id", ids[i], Field.Store.YES,
						Field.Index.NOT_ANALYZED_NO_NORMS));
				doc.add(new Field("name", names[i], Field.Store.YES,
						Field.Index.NOT_ANALYZED_NO_NORMS));
				doc.add(new Field("contents", contents[i], Field.Store.YES,
						Field.Index.ANALYZED));
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
				doc.add(new Field("date", sdf.format(new Date()),
						Field.Store.YES, Field.Index.NOT_ANALYZED));
				// Field.Index.ANALYZED;

				writer.addDocument(doc);
				writer.commit();
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (writer != null) {
				try {
					writer.close();
				} catch (CorruptIndexException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
相關文章
相關標籤/搜索