`
squll369
  • 浏览: 108368 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JSPWiki 支持附件文件内容搜索

阅读更多

   最近项目组要搭一个wiki,经过筛选我们决定使用JSPWiki(网上有大量的分析),待搭完以后,发现他不支持附件文件内容搜索,也就是说,如果这篇wiki中上传了一些doc,xls等文件是不能被搜索到的,但是在jspwiki.properties配置中有如下配置:

 

jspwiki.searchProvider =LuceneSearchProvider
jspwiki.lucene.analyzer = org.apache.lucene.analysis.standard.StandardAnalyzer

 

也就是JSPWiki也是用lucene来做检索的,于是下了他的源码,看了下这个类com.ecyrd.jspwiki.search.LuceneSearchProvider,发现了如下方法:

 

protected String getAttachmentContent( Attachment att )
    {
        AttachmentManager mgr = m_engine.getAttachmentManager();
        //FIXME: Add attachment plugin structure

        String filename = att.getFileName();

        if(filename.endsWith(".txt") ||
           filename.endsWith(".xml") ||
           filename.endsWith(".ini") ||
           filename.endsWith(".html"))
        {
            InputStream attStream;

            try
            {
                attStream = mgr.getAttachmentStream( att );

                StringWriter sout = new StringWriter();
                FileUtil.copyContents( new InputStreamReader(attStream), sout );

                attStream.close();
                sout.close();

                return sout.toString();
            }
            catch (ProviderException e)
            {
                log.error("Attachment cannot be loaded", e);
                return null;
            }
            catch (IOException e)
            {
                log.error("Attachment cannot be loaded", e);
                return null;
            }
        } 
......

 

就是说支持文本文件附件(txt,xml,ini,html)的内容搜索,试了一下,上传了一个txt文件,果然是可以被查出来,。

 

于是决定给这个类动动手术,添加点功能让它可以支持doc和xls, 添加了如下代码在下面(office 2003到2007,文件格式不同,分开来写了),然后重新打包(打好的jar,我放在附件里),启动JSPWiki, 实验了一下,word 和 excel的文件可以被查出来了。

 

注意的是,这个类的作用是,在附件文件上传,用lucene建立了索引,所以实验的话,一定要重新上传文件,在改这个class之前上传的文件时没有用的。

 

......       
     else if(filename.endsWith(".doc")){
            InputStream attStream = null;
            try {
                attStream = mgr.getAttachmentStream(att);             
                WordExtractor extractor = new WordExtractor(attStream);  
                String s = extractor.getText();  
                log.debug("Extracted text: " + s + " from attachment: " + filename);
                return s;              
            } catch (Exception e) {
                log.error("Attachment cannot be loaded", e);
                return null;
            } finally {
                if(attStream != null){
                    try {
                      attStream.close();
                  }
                  catch (IOException e) {
                      log.warn("Couldn't close attachment stream for " + filename, e);
                  }
                }           
            }
        }
        
        else if(filename.endsWith(".docx")){
            InputStream attStream = null;
            try {
                attStream = mgr.getAttachmentStream(att);
                XWPFWordExtractor extractor = new XWPFWordExtractor(new XWPFDocument(attStream));  
                String s = extractor.getText();  
                log.debug("Extracted text: " + s + " from attachment: " + filename);
                return s;              
            } catch (Exception e) {
                log.error("Attachment cannot be loaded", e);
                return null;
            } finally {
                if(attStream != null){
                    try {
                      attStream.close();
                  }
                  catch (IOException e) {
                      log.warn("Couldn't close attachment stream for " + filename, e);
                  }
                }           
            }
        }
        
        else if(filename.endsWith(".xls")){
            InputStream attStream = null; 
            try {
                attStream = mgr.getAttachmentStream(att);
                HSSFWorkbook workbook=new HSSFWorkbook(attStream);
                HSSFSheet sheet=null;
                StringBuffer sb = new StringBuffer();
                for(int i = 0; i < workbook.getNumberOfSheets(); i++) {
                    sheet=workbook.getSheetAt(i);
                    if(sheet == null){
                        continue; 
                    }
                    for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {
                        HSSFRow row=sheet.getRow(j);
                        if(row == null){
                            continue; 
                        }
                        for (int k = 0; k < row.getLastCellNum(); k++) {
                            sb.append(row.getCell(k));   
                            sb.append(" ");
                        }                  
                    }    
                }
                String s = sb.toString();
                log.debug("Extracted text: " + s + " from attachment: " + filename);
                return s; 
                
            } catch (Exception e) {
                log.error("Attachment cannot be loaded", e);
                return null;
            } finally {
                if(attStream != null){
                    try {
                      attStream.close();
                  }
                  catch (IOException e) {
                      log.warn("Couldn't close attachment stream for " + filename, e);
                  }
                }           
            }
        }
        else if(filename.endsWith(".xlsx")){
            InputStream attStream = null; 
            try {
                attStream = mgr.getAttachmentStream(att);
                XSSFWorkbook workbook = new XSSFWorkbook(attStream);
                XSSFSheet sheet=null;
                StringBuffer sb = new StringBuffer();
                for(int i = 0; i < workbook.getNumberOfSheets(); i++) {
                    sheet = workbook.getSheetAt(i);
                    if(sheet == null){
                        continue; 
                    }
                    for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {
                        XSSFRow row=sheet.getRow(j);
     
                        if(row == null){
                            continue; 
                        }
                        for (int k = 0; k < row.getLastCellNum(); k++) {
                            sb.append(row.getCell(k)); 
                            sb.append(" ");
                        }                  
                    }    
                }
                String s = sb.toString();
                log.debug("Extracted text: " + s + " from attachment: " + filename);
                return s; 
                
            } catch (Exception e) {
                log.error("Attachment cannot be loaded", e);
                return null;
            } finally {
                if(attStream != null){
                    try {
                      attStream.close();
                  }
                  catch (IOException e) {
                      log.warn("Couldn't close attachment stream for " + filename, e);
                  }
                }           
            }
        }    
......
 

 

 

分享到:
评论

相关推荐

    JSPWiki使用说明书

    5. **模板与插件**:JSPWiki支持自定义模板,提供丰富的插件系统,如表格、日历、搜索等,增强功能。 ### 四、JSPWiki源码分析 1. **架构**:JSPWiki基于MVC模式设计,使用Servlet处理HTTP请求,JSP负责视图展示,...

    jspwiki之mysql版

    默认情况下,JSPWiki使用内置的文件系统存储页面内容,对于小规模应用而言,这种模式是可行的。然而,随着页面数量的增加,文件系统的性能瓶颈会逐渐显现,如搜索效率低、备份复杂等问题。此时,将数据存储迁移到...

    jspwiki jar

    2. **插件**:JSPWiki支持通过插件扩展功能,如搜索、评论、表单等,这些插件通常以单独的JAR形式存在。 3. **依赖库**:JSPWiki依赖于许多其他的Java库,如Apache Commons、iText(用于PDF导出)等,这些库的JAR...

    JSPWiki是一个不错的wiki引擎,纯jsp/servlet写的。JSPWiki不使用现成的数据库管理软件,所有的文件以文本文件的形式存放。它利用类似CVS的机制保证了文件版本的完整性。支持中文,支持版本比较、权限管理等功能!

    所有过10下载资源归0 JSPWiki是一个不错的wiki引擎,...JSPWiki不使用现成的数据库管理软件,所有的文件以文本文件的形式存放。它利用类似CVS的机制保证了文件版本的完整性。支持中文,支持版本比较、权限管理等功能!

    JSPWiki-2.8.3-安装版

    1. 主题和插件:JSPWiki支持更换主题,以及通过安装插件来扩展功能,如搜索引擎优化、评论系统等。 2. 性能优化:根据服务器负载,调整缓存设置、数据库连接池大小等。 3. 安全性:定期更新JSPWiki以获取最新的安全...

    jspwiki中文模版

    2. **模版应用**: 将"jspwiki中文模版"的文件覆盖到JSPWiki的安装目录下的相应位置,尤其是`templates`目录,确保模版的JSP文件替换掉默认的模板。 3. **配置调整**: 修改`WEB-INF/web.xml`配置文件,设置wiki的...

    一个开源的jspwiki

    - **版本控制**:JSPWiki提供了版本控制系统,可以查看历史版本,比较和恢复旧版内容。 - **权限管理**:支持用户注册和登录,可设置不同的权限级别,如读写权限,确保信息安全。 - **多语言支持**:JSPWiki支持多种...

    理解并使用 JSPWiki 中的权限控制

    除了内置的角色外,JSPWiki 还支持自定义的基于组的角色,这些组角色有一些限制: - 组名称不能与内置角色(如 Admin、Authenticated 等)相同。 - 组名称也不能与现有用户的用户名相同。 **1.3 权限** 在 ...

    jspwiki-2.2.33-src.zip_jsp_jspwiki_jspwiki 2.2_jspwiki2.2_jspwik

    4. **Store**:存储层处理数据的持久化,JSPWiki支持多种存储后端,如文件系统、数据库等,这部分源码展示了如何与不同存储机制交互。 5. **Web-INF**:包含web.xml配置文件,定义了Servlet和过滤器的配置,以及...

    JSPWiki-2.8.2-bin.zip_JSPWiki2.8_Java 8_jspwiki_wiki

    7. **搜索功能**:内置的搜索引擎帮助用户快速查找所需内容。 **安装与部署** JSPWiki-2.8.2-bin.zip通常包括以下步骤: 1. 解压缩文件,得到包含war文件和其他配置文件的目录结构。 2. 将war文件部署到支持Servlet...

    jspwiki-2.8.4

    7. **搜索引擎优化**:2.8.4版本可能包含了对搜索引擎优化的改进,使得wiki内容更容易被搜索引擎发现和索引,从而提升在线可见度。 8. **模板与样式**:用户可以自定义页面模板和样式表,以符合组织的品牌形象或者...

    jspwiki-2.1.115-alpha-src.zip_Alpha_jspwiki_jspwiki eclipse_mult

    在Web应用中,多部分请求常用于上传文件,这表明JSPWiki可能支持用户上传文件到Wiki页面,增强了交互性。 **4. Wiki系统基础** Wiki系统是一种协作式的内容管理系统,允许用户创建、编辑和链接页面。JSPWiki遵循...

    jspwiki

    JSPWiki is a simple WikiWiki clone. It keeps all of itsformatting in JSP files, and uses a custom Java class calledcom.ecyrd.jspwiki.WikiEngine to all interfacing with the Wiki

    jspwiki-一个基于JSP的WIKI工具

    此外,`jspwiki`还具备了链接、标签、搜索等功能,方便用户组织和查找信息。它使用Markdown或Wiki语法,使得文本格式化变得简单,同时支持插件系统,通过安装额外的插件可以扩展其功能。 在提供的压缩包文件中,...

    JSPWiki-2.3.92-alpha-src20060409.rar_Alpha_jspwiki_jspwiki源码

    JSPWiki的核心特性可能包括页面版本控制、用户认证、页面链接跟踪、以及支持wikitext语法,使得非技术人员也能方便地编辑和贡献内容。 "jspwiki_jspwiki源码"标签强调了这是JSPWiki项目的源代码,这意味着我们可以...

    jspwiki相关资料

    JSPWiki需要一个数据库来存储页面内容和其他元数据。常见的支持数据库包括MySQL、PostgreSQL、HSQLDB等。配置数据库通常涉及到以下几个步骤: - 修改`jspwiki.properties`文件中的数据库连接参数,如URL、用户名、...

    [博客空间]JSPWiki stable release v2.2.33_jspwiki-2.2.33-src.rar

    1. **易用性**:JSPWiki使用简单的文本格式来创建页面,支持Markdown和wikitext语法,使得非程序员也能轻松编辑内容。 2. **版本控制**:JSPWiki内置了版本控制系统,可以追踪每一次编辑,方便查看历史版本并恢复旧...

    jspwiki程序加文档

    - 配置web.xml和jspwiki.properties文件,设置数据库连接、权限管理等参数。 - 启动服务器,通过浏览器访问指定URL即可开始使用JSPWiki。 4. **JSPWiki的使用** - 用户注册:新用户可以通过注册账号来参与编辑和...

    JSPWiki安装包

    JSPWiki安装包,详细安装过程可以查看我写的博客,JSPWiki环境搭建

Global site tag (gtag.js) - Google Analytics