`
longgangbai
  • 浏览: 7339603 次
  • 性别: 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);

 

 

分享到:
评论

相关推荐

    YOLO算法-城市电杆数据集-496张图像带标签-电杆.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    (177406840)JAVA图书管理系统毕业设计(源代码+论文).rar

    JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代码+论文) JAVA图书管理系统毕业设计(源代

    (35734838)信号与系统实验一实验报告

    内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    YOLO算法-椅子检测故障数据集-300张图像带标签.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    基于小程序的新冠抗原自测平台小程序源代码(java+小程序+mysql+LW).zip

    系统可以提供信息显示和相应服务,其管理新冠抗原自测平台小程序信息,查看新冠抗原自测平台小程序信息,管理新冠抗原自测平台小程序。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7 小程序开发工具:hbuildx/微信开发者工具

    YOLO算法-俯视视角草原绵羊检测数据集-4133张图像带标签-羊.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    (171674830)PYQT5+openCV项目实战:微循环仪图片、视频记录和人工对比软件源码

    内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    新建 文本文档.docx

    新建 文本文档.docx

    hw06.zip

    hw06

    3. Kafka入门-安装与基本命令

    3. Kafka入门-安装与基本命令

    燃气管道施工资质和特种设备安装改造维修委托函.docx

    燃气管道施工资质和特种设备安装改造维修委托函.docx

    The state of AI 2024.pdf

    AI大模型研究相关报告

    lab02.zip

    lab02

    Unity视频插件AVPro的Win端2.2.3

    仅供学习使用,其他用途请购买正版资源AVPro Video Core Windows Edition 2.2.3 亲测可用的视频播放插件,能丝滑播放透明视频等.

    建设工程消防验收现场指导意见表.docx

    建设工程消防验收现场指导意见表.docx

    MVIMG_20241222_194113.jpg

    MVIMG_20241222_194113.jpg

    五相电机双闭环矢量控制模型-采用邻近四矢量SVPWM-MATLAB-Simulink仿真模型包括: (1)原理说明文档(重要):包括扇区判断、矢量作用时间计算、矢量作用顺序及切时间计算、PWM波的生成

    五相电机双闭环矢量控制模型_采用邻近四矢量SVPWM_MATLAB_Simulink仿真模型包括: (1)原理说明文档(重要):包括扇区判断、矢量作用时间计算、矢量作用顺序及切时间计算、PWM波的生成; (2)输出部分仿真波形及仿真说明文档; (3)完整版仿真模型:包括邻近四矢量SVPWM模型和完整双闭环矢量控制Simulink模型; 资料介绍过程十分详细,零基础手把手教学,资料已经写的很清楚

    YOLO算法-锡罐-牙罐-盖子打开数据集-179张图像带标签-锡罐-牙罐-盖子打开.zip

    YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;

    java毕设项目之ssm基于JSP的乡镇自来水收费系统+jsp(完整前后端+说明文档+mysql+lw).zip

    项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7

Global site tag (gtag.js) - Google Analytics