基于StandardAnalyzer读写索引实例详解
前言
使用lucene创建索引时如果指定了解析器,则需要读写都使用这个解析器,目前我发现也就是在处理中文这块比较麻烦,像你在使用solr时如果配置了ik分词,则需要把index清空重新创建才能继续搜索。
本篇引用lucene-6.4.0和4.x的几个关键类会有不同的地方。
创建索引
1 public void index(){ 2 3 Directory dir=null; 4 Analyzer analyzer=null; 5 IndexWriterConfig config=null; 6 IndexWriter indexWriter=null; 7 try{ 8 /** 9 * SimpleFSDirectory 不能很好支持多线程操作10 * **/11 dir =new SimpleFSDirectory(Paths.get(INDEX_URL));12 13 analyzer=new StandardAnalyzer();14 config =new IndexWriterConfig(analyzer);15 /**16 * IndexWriter(Directory d,IndexWriterConfig config)17 * **/18 indexWriter =new IndexWriter(dir,config);19 20 indexWriter.deleteAll();21 List<UploadBook> books =bookDao.listAllBooks();22 Document document=null;23 24 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");25 26 for(UploadBook book:books){27 document=new Document();28 document.add(new Field("id",book.getId().toString(), TextField.TYPE_STORED));29 document.add(new Field("ip",book.getIp(), TextField.TYPE_STORED));30 document.add(new Field("title",book.getOriginFileName(), TextField.TYPE_STORED));31 32 document.add(new Field("content", PdfReader.read(INDEX_PDF+book.getNewFileName()),TextField.TYPE_STORED));33 document.add(new Field("createtime",formatter.format(book.getCreateTime()), TextField.TYPE_STORED));34 35 indexWriter.addDocument(document);36 }37 38 indexWriter.commit();39 40 System.out.println("======索引创建完成,公创建"+books.size()+"条索引========");41 }catch (IOException ex){42 ex.printStackTrace();43 }44 catch(Exception ex){45 ex.printStackTrace();46 }finally {47 if(indexWriter !=null){48 try{49 indexWriter.close();50 }catch (IOException ex){51 System.out.println("======indexWriter close exception========");52 }53 }54 }55 56 }
读取索引
1 public static List<Book> search2(String kw){ 2 Directory dir=null; 3 Analyzer analyzer=null; 4 List<Book> list = new ArrayList<Book>(); 5 try{ 6 dir= FSDirectory.open(Paths.get("e:\\soso\\index")); 7 analyzer=new StandardAnalyzer(); 8 9 DirectoryReader reader =DirectoryReader.open(dir);10 IndexSearcher searcher=new IndexSearcher(reader);11 12 QueryParser parser=new QueryParser("content",analyzer);13 Query query =parser.parse(kw);14 15 ScoreDoc[] docs=searcher.search(query,100).scoreDocs;16 17 for (int i = 0; i < docs.length; i++) {18 Document firstHit = searcher.doc(docs[i].doc);19 20 Book book=new Book();21 book.setId(Integer.parseInt(firstHit.getField("id").stringValue()));22 book.setIp(firstHit.getField("ip").stringValue());23 24 String title=firstHit.getField("title").stringValue();25 title=title.substring(0,title.lastIndexOf("."));26 book.setTitle(title);27 28 String content=firstHit.getField("content").stringValue();29 if(content.length()>=500){30 content=content.substring(0,500)+"......";31 }32 book.setContent(content);33 34 SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-mm");35 Date date =format.parse(firstHit.getField("createtime").stringValue());36 book.setCreateTime(format.format(date));37 38 list.add(book);39 40 }41 42 }catch(Exception ex){43 44 }finally {45 try{46 dir.close();47 48 }catch(IOException ex){49 ex.printStackTrace();50 }51 }52 53 return list;54 }
以上是基于StandardAnalyzer读写索引实例详解的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

PHP实战:快速实现斐波那契数列的代码示例斐波那契数列是数学中一个非常有趣且常见的数列,其定义如下:第一个和第二个数为0和1,从第三个数开始,每个数都是前两个数的和。斐波那契数列的前几个数字依次为0,1,1.2,3,5,8,13,21,...依此类推。在PHP中,我们可以通过递归和迭代两种方式来实现斐波那契数列的生成。下面我们分别来展示这两

Java开发实战:集成七牛云云存储服务实现文件上传引言随着云计算和云存储的发展,越来越多的应用程序需要将文件上传至云端进行存储和管理。云存储服务的优势在于高可靠性、可扩展性和灵活性。本文将介绍如何使用Java语言开发,集成七牛云云存储服务,实现文件上传功能。七牛云简介七牛云是国内领先的云存储服务提供商,其提供了全面的云存储和内容分发服务。用户可以通过七牛云提

如何使用PHP实现数据缓存和读写功能缓存是提高系统性能的一种重要方式,通过缓存可以将频繁使用的数据存储在内存中,以提高数据的读取速度。在PHP中,我们可以使用各种方法来实现数据缓存和读写功能。本文将介绍两种常用的方法:使用文件缓存和使用内存缓存。一、使用文件缓存文件缓存是将数据存储在文件中,以便后续读取。下面是一个使用文件缓存实现数据读写的示例代码:

MySQL表设计实战:创建一个电商订单表和商品评论表在电商平台的数据库中,订单表和商品评论表是两个非常重要的表格。本文将介绍如何使用MySQL来设计和创建这两个表格,并给出代码示例。一、订单表的设计与创建订单表用于存储用户的购买信息,包括订单号、用户ID、商品ID、购买数量、订单状态等字段。首先,我们需要创建一个名为"order"的表格,使用CREATET

本篇文章给大家带来了关于uniapp跨域的相关知识,其中介绍了uniapp和小程序分包的相关问题,每个使用分包小程序必定含有一个主包。所谓的主包,即放置默认启动页面/TabBar 页面,以及一些所有分包都需用到公共资源/JS 脚本;而分包则是根据开发者的配置进行划分,希望对大家有帮助。

数据导出功能在实际开发中是非常常见的需求,特别是在后台管理系统或者数据报表导出等场景中。本文将以Golang语言为例,分享数据导出功能的实现技巧,并给出具体的代码示例。1.环境准备在开始之前,确保已经安装好Golang环境,并且熟悉Golang的基本语法和操作。另外,为了实现数据导出功能,可能还需要使用第三方库,比如github.com/360EntSec

深入学习Elasticsearch查询语法与实战引言:Elasticsearch是一款基于Lucene的开源搜索引擎,主要用于分布式搜索与分析,广泛应用于大规模数据的全文搜索、日志分析、推荐系统等场景。在使用Elasticsearch进行数据查询时,灵活运用查询语法是提高查询效率的关键。本文将深入探讨Elasticsearch查询语法,并结合实际案例给出

Vue实战:日期选择器组件开发引言:日期选择器是在日常开发中经常用到的一个组件,它可以方便地选择日期,并提供各种配置选项。本文将介绍如何使用Vue框架来开发一个简单的日期选择器组件,并提供具体的代码示例。一、需求分析在开始开发之前,我们需要进行需求分析,明确组件的功能和特性。根据常见的日期选择器组件功能,我们需要实现以下几个功能点:基础功能:能够选择日期,并
