lucene基本操作及原理

把實體對象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());
        }
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章