最近,因爲須要作到搜索功能,可是搜索功能裏面,涉及的關係比較複雜,若是經過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搜索的基本流程,更高效率的還要對內容進行分詞,同義詞處理等。