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 (); } }