Lucene 學習筆記(一)

    最近,因爲須要作到搜索功能,可是搜索功能裏面,涉及的關係比較複雜,若是經過sql語言來查詢,效率十分低下,因此便開始研究了下java開源搜索引擎lucene 。 java

    Lucene入門起來了解其使用規則並不難,他是圍繞索引Index來進行建立,查詢等操做。而索引是存放在Directory中,Directory有不少種類,不過主要分紅兩種: sql

    1、存放在運行內存中的RAMDirectory,既然放在內存中,也就說明他的聲明週期極其短,不過,另外一方面也代表他的讀取存取速度快。 app

    2、存放在物理磁盤中的FileSwitchDirectory, FSDirectory, MockDirectoryWrapper, NRTCachingDirectory ,除了FSDirectory外,其餘幾種是根據環境會發揮出不一樣的性能的,而FSDirectory相對要智能不少,他會根據目前的環境自行決定他的確切存儲方式。 性能

    而Lucene的基本使用流程爲: 搜索引擎

    1、聲明指定Directory ,如: spa


Directory directory = new RAMDirectory();

    2、建立索引並放入指定Directory,如: code

IndexWriter writer = null;
		try {
			writer = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35)));
			writer.deleteAll();
			Document doc = null;
			doc = new Document();
                        doc.add(...); //在此文檔添加信息屬性等
			writer.addDocument(doc);//建立文檔索引
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (LockObtainFailedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if(writer!=null)writer.close();
			} catch (CorruptIndexException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
    3、讀取索引,進行查詢:

try {
			IndexReader reader = IndexReader.open(directory);
			IndexSearcher searcher = new IndexSearcher(reader);
			TermQuery query = new TermQuery(new Term(指定屬性,查詢內容));
//得到查詢數據,條數爲自定義,如下爲10條
			TopDocs tds = searcher.search(query, 10);
			for(ScoreDoc sd:tds.scoreDocs) {
				//查詢到的數據進行數據的操做
			}
			reader.close();
		} catch (CorruptIndexException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
    以上爲Lucene搜索的基本流程,更高效率的還要對內容進行分詞,同義詞處理等。
相關文章
相關標籤/搜索