`
longgangbai
  • 浏览: 7263384 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SpringLuence的学习总结(一)

阅读更多

          在最近,看了一下SpringLuence的源代码,学习关于搜索引擎的设计思路:

    首先关于搜索引擎的两个主要操作为:

    1.建立索引文档

    2.搜索查找信息

 创建索引文档,必须针对不同的文档,获取各种文档的内容,建立文档的信息。

关于建立索引文档的方法请看Luence的基础。

这里主要说一下关于Luence设计的思路。

无论任何文档都可以转换为输入流对象,然后获取文件的内容。

关于文档处理器的接口设计如下:

DocumentHandler

 

源代码如下:

public interface DocumentHandler {

 /**
  * Return whether or not this object can create a document from an
  * instance of the given class. 检测一个对象是否可以创建一个索引文档对象
  */
 boolean supports(Class clazz);
 
 /**
  * This method indexes an object and specifies some additional
  * properties on the Lucene document basing the description parameter.
  *
  * The object to index can be either a POJO or a stream on a resource.
  *
  * @param description the description of the resource to index  Map中存储索引文档的中索引的字段用于建立索引文档时使用
  * @param inputStream the input stream which will be used to index  此处的Object可以时POJO或stream
  */
 Document getDocument(Map description, Object object) throws Exception;
}

 

Document getDocument(Map description, Object object) throws Exception;

此处设置此方法中Object目的为创建索引文档的几种对象不同而设置:

 

 

在SpringLuence中创建索引文档的方式由三种:

1.根据一个流对象创建一个索引文档

2.根据数据库中的对象创建一个索引文档。

3.根据一个类使用反射创建一个索引文档。

 

 

关于一个流创建索引文档的:

其中在各种文档创建文档中,所有的文档处理类继承自抽象输入类文档处理器:AbstractInputStreamDocumentHandler

 

创建一个抽象的类的AbstractInputStreamDocumentHandler用于处理各种文件类型的的

处理器:AbstractTypeFileDocumentHandler

//用于获取文档的独享

 public final Document doGetDocumentWithInputStream(Map description, InputStream inputStream) throws IOException {


  Document document = new Document();
//获取文档的对象

  String text = extractText(inputStream);
  if( text!=null && text.length()>0 ) {
   //The text is analyzed and indexed but not stored
   document.add(new Field("contents", text, Field.Store.NO, Field.Index.TOKENIZED));
  }
  if( description.get(AbstractInputStreamDocumentHandler.FILENAME)!=null ) {
   document.add(new Field("type", "file", Field.Store.YES, Field.Index.UN_TOKENIZED));
   document.add(new Field("filename", (String)description.get(AbstractInputStreamDocumentHandler.FILENAME), Field.Store.YES, Field.Index.UN_TOKENIZED));
  }
  return document;
 }

 

 

 以下各种处理器用于处理各种类型的文档

其中txt文件类型时Luence 默认的 文件处理类型,可以直接得到文档的内容。

 

(1)关于txt文本文件处理方式如下:

protected Document doGetDocumentWithInputStream(Map description,InputStream inputStream) {
//创建一个索引文档对象  

Document document = new Document();

 //将文本文件的内容放入一个context的文档域中在使用可以根据索引域的名称获取文本文件的内容
  document.add(new Field("contents", new InputStreamReader(inputStream)));


  if( description.get(FILENAME)!=null ) {
  //添加文件类型的索引域

   document.add(new Field("type", "file", Field.Store.YES, Field.Index.UN_TOKENIZED));

   document.add(new Field("filename", (String)description.get(FILENAME), Field.Store.YES,  Field.Index.UN_TOKENIZED));


  }
  return document;
 }

 

有Luence基础可以知道在创建索引文档中索引域时必须采用适当的域对象,不然效率可能很低,o(∩_∩)o...哈哈。

 

(2)关于RTF格式的富文本文档。

RTF不可以直接使用输入流对象必须进行处理。方可以得到RTF中内容信息。

由Java Swing 编程的开发人员一般知道一个简便处理RTF富文本类型的工具:

使用SWing中DefaultStyledDocument,RTFEditorKit类轻易解决问题。

 

处理方法如下:先将rtf文档转换为输入流inputstream,使用SWing工具处理。

 //创建样式文档对象

DefaultStyledDocument styledDoc = new DefaultStyledDocument();
 //RTF编辑工具处理文件的内容

new RTFEditorKit().read(inputStream, styledDoc, 0);

   //获取文档的内容信息
String rtfContext=styledDoc.getText(0, styledDoc.getLength());

 

(3)关于Excel的处理方式比较多:使用开源组件处理如Jxl,POI等处理,即可

这里采用的jxl处理的方式:

使用jxl代码如下:

 //创建一个工作簿对象

Workbook workbook=Workbook.getWorkbook(inputStream);

 //获取并遍历每一个工作单中
   for(int cpt = 0; cpt<workbook.getNumberOfSheets(); cpt++) {
    Sheet sheet = workbook.getSheet(cpt);

         //获取遍历每行中信息

          for(int cptRow = 0; cptRow<sheet.getRows(); cptRow++) {

                //获取并遍历每列中的信息
   for(int cptColumn = 0; cptColumn<sheet.getColumns(); cptColumn++) {

  //获取每列的信息
    Cell cell = sheet.getCell(cptColumn,cptRow);
    String cellText = cell.getContents();
    if( cellText!=null && cellText.length()>0 ) {
     appendText(text, cellText);
    }
   }
  }

(4) PDF文档的处理器设计:

针对PDF的处理器,最好使用PDFBox这个组件,因为这个组件中封装累了关于索引文档对象。如果使用POI,就需要非很
     多时间了。

采用PDFBox的LucenePDFDocument对象即可如下:

Document doc=LucenePDFDocument.getDocument(inputStream);

 

 

(5)WORD的文档的处理方式:使用textmining的组件即可 tx-extractors.jar解析或者使用POI解析都比较简单。

使用 tx-extractors.jar解析如下:

将doc文档设置成流对象从流中读取信息。

 WordExtractor wordDocument = new WordExtractor();
  String text = wordDocument.extractText(inputStream);

 

 

分享到:
评论

相关推荐

    材料装订目录(其他证明材料部分).doc

    材料装订目录(其他证明材料部分).doc

    INFO optimization algorithm.zip

    多种智能优化算法设计开发应用,可供学习交流,不断更新资源

    毕业论文写作技巧总结.pdf

    撰写毕业论文是一个复杂且耗时的过程,但通过掌握一些关键的写作技巧,你可以使这个过程变得更加高效和成功。以下是一些有用的写作技巧,可以帮助你撰写出高质量的本科毕业论文。本文介绍毕业设计的写作技巧的几个关键步骤和要点。

    Golang_GoJump通过学习你的习惯来帮助你更快地导航.zip

    Golang_GoJump通过学习你的习惯来帮助你更快地导航

    微信小程序-饿了吗小程序项目源码-原生开发框架-含效果截图示例.zip

    微信小程序凭借其独特的优势,在移动应用市场中占据了一席之地。首先,微信小程序无需下载安装,用户通过微信即可直接使用,极大地降低了使用门槛。其次,小程序拥有与原生应用相近的用户体验,同时加载速度快,响应迅速,保证了良好的使用感受。此外,微信小程序还提供了丰富的API接口,支持开发者轻松接入微信支付、用户授权等功能,为开发者提供了更多的可能性。 微信小程序-项目源码-原生开发框架。想要快速打造爆款小程序吗?这里有一份原生开发框架的项目源码等你来探索!基于微信小程序的强大生态,这份源码将带你领略原生开发的魅力,实现快速迭代与高效开发。从用户授权到微信支付,从界面设计到功能实现,一切尽在掌握。赶快下载查看,让你的小程序项目在竞争激烈的市场中脱颖而出!

    微信小程序-奥多停车小程序小程序项目源码-原生开发框架-含效果截图示例.zip

    微信小程序凭借其独特的优势,在移动应用市场中占据了一席之地。首先,微信小程序无需下载安装,用户通过微信即可直接使用,极大地降低了使用门槛。其次,小程序拥有与原生应用相近的用户体验,同时加载速度快,响应迅速,保证了良好的使用感受。此外,微信小程序还提供了丰富的API接口,支持开发者轻松接入微信支付、用户授权等功能,为开发者提供了更多的可能性。 微信小程序-项目源码-原生开发框架。想要快速打造爆款小程序吗?这里有一份原生开发框架的项目源码等你来探索!基于微信小程序的强大生态,这份源码将带你领略原生开发的魅力,实现快速迭代与高效开发。从用户授权到微信支付,从界面设计到功能实现,一切尽在掌握。赶快下载查看,让你的小程序项目在竞争激烈的市场中脱颖而出!

    微信小程序-抽奖转盘小程序项目源码-原生开发框架-含效果截图示例.zip

    微信小程序凭借其独特的优势,在移动应用市场中占据了一席之地。首先,微信小程序无需下载安装,用户通过微信即可直接使用,极大地降低了使用门槛。其次,小程序拥有与原生应用相近的用户体验,同时加载速度快,响应迅速,保证了良好的使用感受。此外,微信小程序还提供了丰富的API接口,支持开发者轻松接入微信支付、用户授权等功能,为开发者提供了更多的可能性。 微信小程序-项目源码-原生开发框架。想要快速打造爆款小程序吗?这里有一份原生开发框架的项目源码等你来探索!基于微信小程序的强大生态,这份源码将带你领略原生开发的魅力,实现快速迭代与高效开发。从用户授权到微信支付,从界面设计到功能实现,一切尽在掌握。赶快下载查看,让你的小程序项目在竞争激烈的市场中脱颖而出!

    ipython-8.3.0.tar.gz

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    HTML5仿微信朋友圈UI界面,免费下载

    HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载HTML5仿微信朋友圈UI界面,免费下载

    毕业设计MATLAB_通过确定LYAPUNOV指数实现混沌检测的算法.zip

    毕业设计MATLAB_通过确定LYAPUNOV指数实现混沌检测的算法.zip

    libaacs-0.3.1-1.fc17.armv7hl.rpm

    安装:rpm -i xx.rpm

    团长头像制作小程序源码 支持流量主

    最近各类团长挺火的 然后就诞生了这款团长头像制作器 支持流量主模式 支持自定义文字,和拥有各种团长模板等等。

    YOLOv10是YOLO(You Only Look Once)系列中的最新成员,该系列以其高效和准确的目标检测能力在计算机视觉

    YOLOv10是YOLO(You Only Look Once)系列中的最新成员,该系列以其高效和准确的目标检测能力在计算机视觉领域享有盛誉。以下是关于YOLOv10的详细介绍: 背景与动机: YOLO系列模型自YOLOv1以来,一直在追求实时目标检测的高性能和效率。然而,先前的版本存在如后处理依赖、计算冗余等问题,限制了模型的能力。 YOLOv10旨在从后处理和模型架构两个方面进一步推进YOLOs的性能效率边界。 关键技术特点: 一致的双任务方法:用于无NMS(非最大抑制)训练的YOLOs,同时带来了具有竞争力的性能和较低的推理延迟。 整体效率-精度驱动的模型设计策略:从效率和精度两个角度对YOLOs的各个组成部分进行了全面优化,大大降低了计算开销,增强了性能。 性能表现: YOLOv10在各种模型尺度上都达到了最先进的性能和效率。 例如,YOLOv10-S在COCO数据集上类似的AP(平均精度)下比RT-DETR-R18快1.8倍,同时参数数量和FLOPs(浮点运算次数)减少2.8倍。 与YOLOv9-C相比,在相同性能下,YOLOv10-B的延迟减少了46%,参数减少了25%。

    初学者入门必备C语言基础知识大汇总.docx

    c语言入门初学者入门必备C语言基础知识大汇总.docx

    (解压密码1234) C#混淆加密大师1.1.0

    C#混淆加密大师可以加密混淆C#编写的dll和exe程序(包括Winform程序, WPF程序, Unity游戏程序,控制台程序等),支持.Net Framework 2.0 ~ .Net Framework 4.x, 以及.NET Core 2.0 - .NET 8。 除了加密混淆代码功能,C#混淆加密大师还可以对EXE程序进行加壳,增加防篡改,注入垃圾数据等功能,可以有效保护C#编写的程序代码知识产权,防止代码逻辑被拷贝,以及程序被篡改等。 1. 支持多种不同的程序框架: 包括Winform程序, WPF程序, Unity游戏程序,控制台程序等 2. 支持不同版本的Framework, 包括.Net Framework 2.0 - .Net Framework 4.x 以及.NET Core 2.0 - .NET 8 3. 支持字符串加密,流程控制,方法重命名,域重命名,数字混淆等多种混淆功能 4. 支持加壳,防篡改,防反编译工具等功能 5. 支持注入垃圾函数,类型,字符串等 6. 支持多种重命名规则

    程序员必备的数据结构和算法知识

    以脑图的方式,结构非常清晰的整理我们作为开发人员采用到的数据结构和算法

    JAVA图书馆项目代码

    JAVA图书馆项目代码

    医师定期考核工作安排表.docx

    医师定期考核工作安排表.docx

    内酰胺酶抑制剂复方制剂药代动力学参数表.docx

    内酰胺酶抑制剂复方制剂药代动力学参数表.docx

    车辆管理系统的 java 代码.pdf

    用java代码编写的车辆管理系统,编写的时候有点粗糙,详细功能需要根据实际调整,可以作为参考。具体功能有, 添加车牌号信息:删除车牌号信息:显示所有车牌号信息等。

Global site tag (gtag.js) - Google Analytics