zoukankan      html  css  js  c++  java
  • Lucene 6.5.0 入门Demo

    Lucene 6.5.0 要求jdk 1.8

    1.目录结构;

    2.数据库环境;

    private int id;
    private String name;
    private float price;
    private String pic;
    private String description

    3.

    LuceneApache的一个全文检索引擎工具包,它不能独立运行不能单独对外提供服务

    /**
     * Created by  on 2017/4/25.
     */
    public class IndexManager {
        @Test
        public void createIndex() throws Exception {
            // 采集数据
            BookDao dao = new BookDaoImpl();
            List<Book> list = dao.queryBooks();
    
            // 将采集到的数据封装到Document对象中
            List<Document> docList = new ArrayList<Document>();
            Document document;
            for (Book book : list) {
                document = new Document();
                // store:如果是yes,则说明存储到文档域中
                // 图书ID
                // Field id = new TextField("id", book.getId().toString(), Store.YES);
    
                Field id = new TextField("id", Integer.toString(book.getId()), Field.Store.YES);
                // 图书名称
                Field name = new TextField("name", book.getName(), Field.Store.YES);
                // 图书价格
                Field price = new TextField("price", Float.toString(book.getPrice()), Field.Store.YES);
                // 图书图片地址
                Field pic = new TextField("pic", book.getPic(), Field.Store.YES);
                // 图书描述
                Field description = new TextField("description", book.getDescription(), Field.Store.YES);
    
                // 将field域设置到Document对象中
                document.add(id);
                document.add(name);
                document.add(price);
                document.add(pic);
                document.add(description);
    
                docList.add(document);
            }
            //JDK 1.7以后 open只能接收Path/////////////////////////////////////////////////////
    
            // 创建分词器,标准分词器
            Analyzer analyzer = new StandardAnalyzer();
    
            // 创建IndexWriter
            // IndexWriterConfig cfg = new IndexWriterConfig(Version.LUCENE_6_5_0,analyzer);
            IndexWriterConfig cfg = new IndexWriterConfig(analyzer);
    
            // 指定索引库的地址
    //         File indexFile = new File("D:\LaEclipse\lecencedemo\");
    //         Directory directory = FSDirectory.open(indexFile);
            Directory directory = FSDirectory.open(FileSystems.getDefault().getPath("D:\Lpj\JetBrains\lucenceIndex1\"));
    
            IndexWriter writer = new IndexWriter(directory, cfg);
          writer.deleteAll(); //清除以前的index
            // 通过IndexWriter对象将Document写入到索引库中
            for (Document doc : docList) {
                writer.addDocument(doc);
            }
    
            // 关闭writer
            writer.close();
        }
    
    }
    

      

    /**
     * Created by  on 2017/4/25.
     */
    public class IndexSearch {
        private void doSearch(Query query) {
            // 创建IndexSearcher
            // 指定索引库的地址
            try {
    //			File indexFile = new File("D:\Lpj\Eclipse\lecencedemo\");
    //			Directory directory = FSDirectory.open(indexFile);
                // 1、创建Directory
                //JDK 1.7以后 open只能接收Path
                Directory directory = FSDirectory.open(FileSystems.getDefault().getPath("D:\Lpj\JetBrains\lucenceIndex1\"));
                IndexReader reader = DirectoryReader.open(directory);
                IndexSearcher searcher = new IndexSearcher(reader);
                // 通过searcher来搜索索引库
                // 第二个参数:指定需要显示的顶部记录的N条
                TopDocs topDocs = searcher.search(query, 10);
    
                // 根据查询条件匹配出的记录总数
                int count = topDocs.totalHits;
                System.out.println("匹配出的记录总数:" + count);
                // 根据查询条件匹配出的记录
                ScoreDoc[] scoreDocs = topDocs.scoreDocs;
    
                for (ScoreDoc scoreDoc : scoreDocs) {
                    // 获取文档的ID
                    int docId = scoreDoc.doc;
    
                    // 通过ID获取文档
                    Document doc = searcher.doc(docId);
                    System.out.println("商品ID:" + doc.get("id"));
                    System.out.println("商品名称:" + doc.get("name"));
                    System.out.println("商品价格:" + doc.get("price"));
                    System.out.println("商品图片地址:" + doc.get("pic"));
                    System.out.println("==========================");
                    // System.out.println("商品描述:" + doc.get("description"));
                }
                // 关闭资源
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        @Test
        public void indexSearch() throws Exception {
            // 创建query对象
            Analyzer analyzer = new StandardAnalyzer();
            // 使用QueryParser搜索时,需要指定分词器,搜索时的分词器要和索引时的分词器一致
            // 第一个参数:默认搜索的域的名称
            QueryParser parser = new QueryParser("description", analyzer);
    
            // 通过queryparser来创建query对象
            // 参数:输入的lucene的查询语句(关键字一定要大写)
            Query query = parser.parse("description:java AND lucene");
    
            doSearch(query);
    
        }
    

      

  • 相关阅读:
    Lync 2013和Exchange 2013集成
    eclise配置tomcat出现服务Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4 and Java EE 5 Web modules
    二叉树C语言
    NYOJ 298 相变点(矩阵高速功率)
    简化网站开发:SiteMesh小工具
    Android Ant 和 Gradle 包装工艺和效率控制
    [Webpack 2] Chunking common modules from multiple apps with the Webpack CommonsChunkPlugin
    [Webpack 2] Grouping vendor files with the Webpack CommonsChunkPlugin
    [Webpack 2] Hashing with Webpack for long term caching
    [Webpack 2] Maintain sane file sizes with webpack code splitting
  • 原文地址:https://www.cnblogs.com/jwlfpzj/p/6762593.html
Copyright © 2011-2022 走看看