搜索引擎技術方案數據庫
----有搜索引擎需求服務器
方案一:(推薦)框架
方案二:搜索引擎
假設是內存索引庫對象
Directory ramDirectory = new RamDirectory(Directory d);blog
這樣就可以把一個索引庫放入到內存索引庫中索引
利用IndexWriter.addIndexesNoOptimize方法可以把很是多個索引庫進行合併操做.內存
public void testCreateIndex() throws Exception{資源
/**get
* 一、建立一個student對象,並且把信息存放進去
* 二、調用indexWriter的API把數據存放在索引庫中
* 三、關閉indexWriter
*/
// 建立一個Student對象。並且把信息存放進去
Student student = new Student();
student.setId(1L);
student.setName("張三");
// 調用indexWriter的API把數據存放在索引庫中
/**
* 建立一個IndexWriter
* 參數三個 一、索引庫, 指向索引庫的位置 二、分詞器
*/
// 建立索引庫
Directory directory = FSDirectory.open(new File("./indexDir"));
// 建立分詞器
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
IndexWriter indexWriter = new IndexWriter(directory, analyzer, MaxFieldLength.LIMITED);
// 把一個student對象轉化成document
Document document = new Document();
Field idField = new Field("id",student.getId().toString(),Store.YES,Index.NOT_ANALYZED);
Field nameField = new Field("name",student.getName(),Store.YES,Index.ANALYZED);
document.add(idField);
document.add(nameField);
indexWriter.addDocument(document);
// 關閉indexWriter
indexWriter.close();
}
public void testSearchIndex() throws Exception{
/**
* 一、建立一個IndexSearch對象
* 二、調用search方法進行檢索
* 三、輸出內容
*/
// 建立一個 IndexSearch對象
Directory directory = FSDirectory.open(new File("./indexDir"));
IndexSearcher indexSearcher = new IndexSearcher(directory);
// 調用search方法進行檢索
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
QueryParser queryParser = new QueryParser(Version.LUCENE_30,"name",analyzer);
Query query = queryParser.parse("張"); // 要查找的關鍵詞
TopDocs topDocs = indexSearcher.search(query, 2); // 前兩條
int count = topDocs.totalHits; // 依據關鍵詞查詢出來的總的記錄數
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
List<Student> studentList = new ArrayList<Student>();
for(ScoreDoc scoreDoc:scoreDocs){
float score = scoreDoc.score; // 關鍵詞得分
int index = scoreDoc.doc; // 索引的下標
Document document = indexSearcher.doc(index);
// 把document轉化成Student
Student student = new Student();
student.setId(Long.parseLong(document.get("id"))); // document.getField("id").stringValue()
student.setTitle(document.get("name"));
studentList.add(student);
}
for(Student student:studentList){
System.out.println(student.getId());
System.out.println(student.getName());
}
}