把實體對象Article保存到文件中進行查找
public class Article { private Long id; private String title; private String content; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
lucene已document 形式存儲如圖
整體文件可看成一個document 每個實體對象可看成一個List<Feild> 實體對象裏的屬性名對應file裏的key 實例對象實行值對象file val。實體對象裏面的屬性構成List<Feild>
把對象存到文件中
在文件中讀取
@Test public void testCreateIndex() throws Exception{ /** * 1、創建一個article對象,並且把信息存放進去 * 2、調用indexWriter的API把數據存放在索引庫中 * 3、關閉indexWriter */ //創建一個article對象,並且把信息存放進去 Article article = new Article(); article.setId(1L); article.setTitle("lucene可以做搜索引擎"); article.setContent("baidu,google都是很好的搜索引擎"); //調用indexWriter的API把數據存放在索引庫中 /** * 創建一個IndexWriter * 參數三個 * 1、索引庫 指向索引庫的位置 * 2、分詞器 */ //創建索引庫 Directory directory = FSDirectory.open(new File("./indexDir")); //創建分詞器 Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30); IndexWriter indexWriter = new IndexWriter(directory, analyzer, MaxFieldLength.LIMITED); //把一個article對象轉化成document Document document = new Document(); Field idField = new Field("id",article.getId().toString(),Store.YES,Index.NOT_ANALYZED); Field titleField = new Field("title",article.getTitle(),Store.YES,Index.ANALYZED); Field contentField = new Field("content",article.getContent(),Store.YES,Index.ANALYZED); document.add(idField); document.add(titleField); document.add(contentField); indexWriter.addDocument(document); //關閉indexWriter indexWriter.close(); } @Test public void testSearchIndex() throws Exception{ /** * 1、創建一個 IndexSearch對象 * 2、調用search方法進行檢索 * 3、輸出內容 */ //創建一個 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,"content",analyzer); Query query = queryParser.parse("lucene");//關鍵詞 TopDocs topDocs = indexSearcher.search(query, 2); int count = topDocs.totalHits;//根據關鍵詞查詢出來的總的記錄數 ScoreDoc[] scoreDocs = topDocs.scoreDocs; List<Article> articleList = new ArrayList<Article>(); for(ScoreDoc scoreDoc:scoreDocs){ float score = scoreDoc.score;//關鍵詞得分 int index = scoreDoc.doc;//索引的下標 Document document = indexSearcher.doc(index); //把document轉化成article Article article = new Article(); article.setId(Long.parseLong(document.get("id")));//document.getField("id").stringValue() article.setTitle(document.get("title")); article.setContent(document.get("content")); articleList.add(article); } for(Article article:articleList){ System.out.println(article.getId()); System.out.println(article.getTitle()); System.out.println(article.getContent()); } }