搜索项目并不是一个很大的项目,在实际项目中往往是作为子项目和别的项目集成在一起的。比如说和OA项目集成在一起,作为另外一个项目的子系统来使用。搜索项目的功能并不复杂。

整个项目是文档搜索项目,如题:企业文档搜索项目。

是以word文档和pdf文档为例讲解的。pdf文档存放的位置是在/sooba/WebRoot/datadir/pdfdir/HITS算法在Web挖掘中的应用与改进.pdf。word文档存放的位置是在/sooba/WebRoot/datadir/worddir/面向语义Web 语义表示的模糊描述逻辑.doc。

三步骤:初始化索引、建立pdf文档索引、建立word文档索引。

后台还有一个对应的对索引进行维护的页面,或者说是一个索引维护的功能。

我们这块搜索的功能是根据关键词找出对应文档,把对应的索引删除掉。那么我们在进行搜索的时候,这些搜索的内容就不在我们搜索的范围之内,就是删除掉的内容就不在我们的搜索范围之内。

整个项目的基本的功能:第一个建立索引、第二个对索引进行维护、第三个查询。当然还有分页的功能。

针对这个项目开发,采用另外一种开发方式,采用基于原型的开发方式。或者说我们看着这个项目原型把它开发出来和当前这个项目一模一样的一个项,这就是基于原型的开发方式。

需求分析:

普通用户的需求:

能够把文档中包含的关键字作为关键词进行搜索,把对应的文档找到,那能够处理就可以了,这是客户的需求。查询的时候,我们可以输入对应关键词,按需求进行查询。

基本的需求:按照客户的需求可以检索到对应的文档,可以处理对应的文档就可以了。需求并不复杂。

管理员的需求:

可以对文档建立索引,可以对文档索引进行维护,拥有管理员权限的人才可以对索引进行维护。

这个就是客户的需求。

下面画一个usecase用例图说明这个项目的需求。

这是我们简单的需求用例图

系统设计:

系统设计首先说技术方案选型:页面处理这块选择Struts 2,Struts 2是一个用得很多的、比较流行的开源的解决业务层的技术方案。数据库处理方案:ibatis。比较小巧,使用方便,灵活性比较好,特别适合对sql语句要求比较多的项目。这是选型。

第二个,通过Spring把ibatis和Struts 2结合在一起。

这是整个项目整体的技术选型。

对于word的处理是用POI,对于pdf的处理使用的是x-pdf。

这是整体的技术方案。

系统设计分三大部分:第一部分:查询。包括查询主页面

这是查询的设计。

另外维护的设计:

整个项目的表并不复杂,一共用了两张表,一个是管理员表,

通过这张表我们可以管理管理员的相关信息,通过管理管理员的相关信息来实现对索引的维护操作。另外一个是索引的维护表:

这张表我们可以建立索引的文档,每对一个文档建立索引就要把这个文档相关信息插入到数据库表中。那么我们在对索引进行维护时,每删除一个文档,信息要从数据库删除掉。这是两张表。

所以整个项目的数据库设计并不复杂。

整个项目用到的技术选型总结:

测试用JUnit4,分页没有使用组件,独立开发的

对应的索引记录表,它用来保存创建已经建立索引对应的相关文档信息,已经建立索引的相关文档信息保存在索引表中。这个索引表对应文档索引信息表,它里面包含四个字段:

id 唯一的标识添加索引中的对应文档

filename  文档的名字

doctype   文档类型pdf/word

lastmodify 文档的最后更新时间/最后修改时间

在开发的过程中先开发管理界面,就是索引的维护,以及索引的建立,就是我们先开发维护功能。第一个就是开发索引的建立:初始化索引、pdf文档索引、word文档索引,接着再建立对应的索引的维护。接着实现整个文档搜索的功能。

第一个知识点:Struts 2内置对象传值问题。在JSP下面进行数据传值处理往往是通过Session或者是Request进行传值处理,把一个对象放到Session中或者是把一个对象放到Request中。在目标页面中再从Session中或者是Request中把值取出来。可以使用EL表达式或者是Java表达式。更习惯用EL表达式做数据的展示处理。在Struts 2中,传值的处理也是通过Request或者Session来处理的。但是它实现的方式和Struts 1.x和JSP稍微有些不同。在Struts 2下面怎么实现内置对象传值问题,怎么处理传值问题,怎么通过内置对象处理传值问题。

10 华电内部文档搜索系统 search02的更多相关文章

  1. 10 华电内部文档搜索系统 search05

    上一节讲述了索引更新的处理方案,这一节首先讲述索引维护的相关方案.每创建一个索引,把文档相关的信息插入到数据库中.这个时候会产生一个唯一的对应的ID,获取这个ID之后,把这个ID又插入到对应的索引文件 ...

  2. 10 华电内部文档搜索系统 search01

    Lucene解决搜索问题.ibatis实现存放问题,就是解决持久化问题.Struts 2做页面显示,就是实现业务层对应的功能. Spring与ibatis结合, 添加Spring支持 右击项目名s2i ...

  3. 10 华电内部文档搜索系统 search03

    上一节讲解了怎么在Struts 2下面使用内置对象传值,在Struts 2下面是用Session或者Request存放对象.在Struts 2下面是用内部对象传值,和JSP页面下面稍微有些不同.但是实 ...

  4. 10 华电内部文档搜索系统 search04

    上一节我们着重讲解了权限过滤器的使用.这一节讲解一下补充一下Struts 2下面对应的Checkbox的使用.对索引下面的数据进行维护操作,一次可以删除多个.在Struts 2下面使用对应的Check ...

  5. troff - groff 文档排版系统的 troff 处理器

    总览 SYNOPSIS troff [ -abcivzCERU ] [ -d cs ] [ -f fam ] [ -F dir ] [ -m name ] [ -M dir ] [ -n num ] ...

  6. 海量Office文档搜索

    知识管理系统Data Solution研发日记之十 海量Office文档搜索   经过前面两篇文章的介绍,<分享制作精良的知识管理系统 博客备份程序 Site Rebuild>和<分 ...

  7. mindoc 在线文档接口系统的 docker 制作过程

    说明: mindoc 是一款在线接口文档编辑系统,百度一下就知道了.github地址:https://github.com/lifei6671/mindoc 本机:ubuntu16.04 + dock ...

  8. 基于Noootes/Dooomino的文档工作流系统(转)

    (流程样例应用程序终于整理上传好可供下载了http://download.csdn.net/download/starrow/8422299) 上文分析了我们的流程配置使用三类对象,分别对应三类文档: ...

  9. lucene全文搜索之四:创建索引搜索器、6种文档搜索器实现以及搜索结果分析(结合IKAnalyzer分词器的搜索器)基于lucene5.5.3

    前言: 前面几章已经很详细的讲解了如何创建索引器对索引进行增删查(没有更新操作).如何管理索引目录以及如何使用分词器,上一章讲解了如何生成索引字段和创建索引文档,并把创建的索引文档保存到索引目录,到这 ...

随机推荐

  1. @EnableAutoConfiguration注解原理

    前言 Spring Boot中引入了自动配置,让开发者利用起来更加的简便.快捷.比如内嵌的tomcat端口默认配置是8080,这些都属于Spring Boot自动配置的范畴,当然其自动配置相当多. s ...

  2. 从数据库导出数据到excel之List<List<Object>>导出

    说明:有时候数据处理为List<List<Object>>更方便 姊妹篇:从数据库导出数据到excel之List<Map<>>导出 兄弟篇:从数据库导出 ...

  3. Android JNI中的数据传递

    1.JNI 基本类型 当 Java 代码与本地代码 C/C++ 代码相互调用时,肯定会有参数的传递.两者属于不同的语言,数据类型有差别,此时,JNI 要保证两种语言之间的数据类型和数据空间大小的匹配. ...

  4. Android.mk语法解析

    Android.mk 相当于 Linux 中的 Makefile 文件,用来向安卓系统描述如何编译源代码.该文件会被编译器解析多次,所以尽量减少在 Android.mk 中声明变量. Android. ...

  5. 『备忘录』elasticsearch 去重分页查询

    一开始数据结构设计的很复杂,又是父子关系又是嵌套关系,结果发现不能通过简单的查询得到想要的结果:比如一个商店只出现一件符合条件的商品,弄得查询语句就变成这样了 curl -XPOST http://l ...

  6. linux命令ls -l的默认排序方式

    差不多快实现完了ls -l,但是在测试阶段发现一个问题,对于包含[a-ZA-Z]之外的字符,系统的排序方式并不一样. 很想了会儿,总算发现原来它的排序方式是无视[a-ZA-Z]之外的字符的 至于怎么发 ...

  7. javascript基础-js函数

    一.创建函数的方式 1)普通方式 function cal( num1, num2 ) { return num1+num2; } 2)使用变量初始化方式 var plus = function(nu ...

  8. mysql实战优化之一:sql优化

    1.选取最适用的字段属性 MySQL 可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得 ...

  9. laravel5中添加自定义函数

    laravel里面我们很多朋友不知道把自定义函数放在哪儿.我们的应用里经常会有一些全局都可能会用的函数,我们应该怎么放置它会比较好呢?现在匀们为大家准备了laravel放置函数的规范. 1. 创建文件 ...

  10. 第一章 先把Kubernetes跑起来

    1.1 先跑起来 k8s官网已经为大家准备好了一个现成的最小可用系统.  https://kubernetes.io/docs/tutorials/kubernetes-basics/ 1.2 创建K ...