Getting Started with Lucene Case

1. Create a new project to import maven lucene its dependencies

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- mysql版本 -->
        <mysql.version>5.1.10</mysql.version>
        <!-- lucene版本 -->
        <lucene.version>4.10.3</lucene.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.6</version>
            <scope>provided</scope>
        </dependency>
        <!-- mysql数据库依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!--lucene依赖包 -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>${lucene.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
            <version>${lucene.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>${lucene.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!-- ik分词器 -->
        <dependency>
            <groupId>com.janeluo</groupId>
            <artifactId>ikanalyzer</artifactId>
            <version>2012_u6</version>
        </dependency>
    </dependencies>

 2. Prepare the index data

 

package com.pomelo.dao.impl;

import com.pomelo.dao.BookDao;
import com.pomelo.domain.Book;
import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

//准备文档数据
public class BookDaoImpl implements BookDao {

    @Override
    public List<Book> findAll() {

        List<Book> bookList = newThe ArrayList <> (); 
        Connection Connection = null ; 
        the PreparedStatement Statement = null ; 
        the ResultSet the resultSet = null ; 

        the try {
             // 1. Load drive 
            the Class.forName ( "com.mysql.jdbc.Driver" );
             // 2. Create a connection 
            = DriverManager.getConnection Connection ( "jdbc: MySQL: // localhost: 3306 / the SSM", "root", "root" );
             // 3. create a pre-compiled object 
            of Statement = Connection.prepareStatement ( "Book from the SELECT *" ) ;
             // 4.Execute a query, get the results set
            resultSet = statement.executeQuery();

            //5. 循环遍历,放入list容器
            while (resultSet.next()) {
                Book book = new Book();
                book.setId(resultSet.getInt("id"));
                book.setBookName(resultSet.getString("bookname"));
                book.setPrice(resultSet.getFloat("price"));
                book.setPic(resultSet.getString("pic"));
                book.setBookDesc(resultSet.getString("bookdesc"));
                bookList.add(book);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //6. 释放资源
            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (resultSet != null) {
                    resultSet.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

        return bookList;
    }

    //测试
    @Test
    public void findAllTest() {
        List<Book> bookList = findAll();
        System.out.println(bookList);
    }

}

 

3.创建索引库

package com.pomelo.search;

import com.pomelo.dao.BookDao;
import com.pomelo.dao.impl.BookDaoImpl;
import com.pomelo.domain.Book;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

//2. 创建索引
public class IndexManagerDemo {

    @Test
    public void createIndex() throws IOException {

        //1. 采集文档数据
        BookDao bookDao = new BookDaoImpl();
        List<Book> bookList = bookDao.findAll();

        //2. 创建文档对象
        List <the Document> = DocumentList new new the ArrayList <> ();
         for (Book Book: bookList) { 
            the Document Document = new new the Document ();
             / ** 
             * IntField integer type field, TextField text type fields, FloatField float type field 
             * parameter 1: domain - the corresponding database field names 
             * 2 parameters: field value 
             * parameter 3: is stored - whether the value stored in the field corresponding to the document 
             * / 
            document.add ( new new the TextField ( "the bookId" , book.getId () + "" , Store.YES)); 
            document.add ( new new the TextField ( "bookName" , book.getBookName (), Store.YES)); 
            document.add ( new newThe TextField ( "bookPrice", book.getPrice () + "" , Store.YES)); 
            document.add ( new new the TextField ( "bookPic" , book.getPic (), Store.YES)); 
            document.add ( new new the TextField ( "bookDesc" , book.getBookDesc (), Store.YES)); 

            documentList.add (document); 
        } 

        // 3. Create tokenizer 
        Analyzer Analyzer = new new IKAnalyzer (); 

        // . 4, configured to create a document index Object 
        IndexWriterConfig = indexWriterConfig new new IndexWriterConfig (Version.LUCENE_4_10_3, Analyzer); 

        // 5, create a directory to store index directory, specify the index storage path 
        File File = new new File("C:\\tmp\\lucene\\book1");
        Directory directory = FSDirectory.open(file);

        //6、创建索引编写器
        IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);

        //7、利用索引编写器写入文档到索引目录
        for (Document document : documentList) {
            //把文档对象写入到索引库中
            indexWriter.addDocument(document);
        }

        //8. 释放资源
        indexWriter.close();

    }

}

 

 

4.检索索引

package com.pomelo.search;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
importorg.junit.Test;
 Import org.wltea.analyzer.lucene.IKAnalyzer; 

Import java.io.File; 

// 3. retrieval index 
public  class SearchManagerDemo { 

    @Test 
    public  void SearchIndex () throws Exception { 

        // 1. Create word an 
        analyzer analyzer = new new IKAnalyzer (); 

        // 2, create the query object query
         // 2.1, create a query analyzer; parameter 1: the default queries, parameter 2: tokenizer 
        QueryParser QueryParser = new new QueryParser ( "bookName" , analyzer );
         // 2.2, create a Query object 
        Query query = queryParser.parse ( "java"); 

        // 3, create a directory to store index Directory, specify the index storage path 
        Directory Directory = FSDirectory.open ( new new File ( "C: \\ tmp \\ \\ Lucene Book1" )); 

        // 4, creating an index reading objects IndexReader 
        IndexReader IndexReader = DirectoryReader.open (Directory); 

        // 5, create an index search object IndexSearcher, perform a search returns results 
        IndexSearcher IndexSearcher = new new IndexSearcher (IndexReader);
         / ** 
         * parameter 1: query Object 
         * parameter 2: query ago n documents 
         * returns: score document (a document that contains an array, the total number of hits) 
         * / 
        TopDocs TopDocs = indexSearcher.search (query, 10 ); 
        System.out.println ( number of "hits documents in line with the total for this query : "+ topDocs.totalHits);

        //6、处理搜索结果
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
        for (ScoreDoc scoreDoc : scoreDocs) {
            System.out.println("文档在Lucene中的id为:" + scoreDoc.doc + ";文档分值为:" + scoreDoc.score);
            //根据lucene中的文档id查询到文档
            Document document = indexSearcher.doc(scoreDoc.doc);

            System.out.println("文档id为:" + document.get("bookId"));
            System.out.println("名称为:" + document.get("bookName"));
            System.out.println("价格为:" + document.get("bookPrice"));
            System.out.println ( "Photo:" + document.get ( "bookPic" )); 
            System.out.println ( "described as:" + document.get ( "bookDesc" )); 
            System.out.println ( "---------------------------------------" ); 
        } 
        // 7, the release of resources 
        indexReader.close (); 
    } 

}

 

Guess you like

Origin www.cnblogs.com/pomelo-lemon/p/11425175.html