热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

学习笔记:从0开始学习大数据30.solr通过java导入doc,pdf文档建立全文检索

1.eclipse新建maven项目solr,pom.xml加入依赖2在项目下新建类updoctestpackagecom.linbin.solr;importja

1. eclipse 新建maven项目solr,pom.xml 加入依赖

2 在项目下新建类updoctest

package com.linbin.solr;import java.io.File;
import java.io.IOException;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.request.AbstractUpdateRequest.ACTION;
import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;public class updoctest {public static String solrUrl = "http://centos7:8983/solr/mycore"; public static void main(String[] args) throws Exception {//查询 findIndex1();//删除 deleteIndexById();// 导入doc文档String fileName = "/home/linbin/文档/能工巧匠进校园.doc";String solrId = "能工巧匠进校园.doc";indexFilesSolrCell(solrId, solrId,fileName);}// 查询测试public static void findIndex1() throws IOException, SolrServerException {HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build(); SolrQuery query = new SolrQuery(); // 创建搜索对象 query.set("q","*:*"); // 设置搜索条件query.setRows(10); //设置每页显示多少条QueryResponse response = solrClient.query(query); //发起搜索请求SolrDocumentList docs = response.getResults(); // 查询结果long cnt = docs.getNumFound(); // 查询结果总数System.out.println("总条数为"+cnt+"条"); for (SolrDocument doc : docs) {// System.out.println(doc);System.out.println("-------------\r\n");System.out.println("id:"+ doc.get("id") + ",autor:"+ doc.get("author") + ",text:"+ doc.get("text"));}solrClient.close();}//删除测试
public static void deleteIndexById() throws IOException, SolrServerException {HttpSolrClient solrClient = new HttpSolrClient.Builder(solrUrl).build(); //全删 //solrClient.deleteByQuery("*:*"); //模糊匹配删除(带有分词效果的删除)solrClient.deleteByQuery("id:solr-word.pdf"); //指定id删除 //solrClient.deleteById("1"); solrClient.commit();}// 导入doc文档测试
public static void indexFilesSolrCell(String fileName, String solrId, String path)throws IOException, SolrServerException{SolrClient solr = new HttpSolrClient.Builder(solrUrl).build();ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract");String contentType = getFileContentType(fileName);up.addFile(new File(path), contentType);up.setParam("literal.id", fileName);up.setParam("uprefix", "ignored_");up.setParam("fmap.content", "text");//文件内容up.setAction(ACTION.COMMIT, true, true);solr.request(up);System.out.println("upload ok! \r\n");}//根据文件拓展名获取文件类型
public static String getFileContentType(String filename) {String contentType = "";String prefix = filename.substring(filename.lastIndexOf(".") + 1);if (prefix.equals("xlsx")) {contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";} else if (prefix.equals("pdf")) {contentType = "application/pdf";} else if (prefix.equals("doc")) {contentType = "application/msword";} else if (prefix.equals("txt")) {contentType = "text/plain";} else if (prefix.equals("xls")) {contentType = "application/vnd.ms-excel";} else if (prefix.equals("docx")) {contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";} else if (prefix.equals("ppt")) {contentType = "application/vnd.ms-powerpoint";} else if (prefix.equals("pptx")) {contentType = "application/vnd.openxmlformats-officedocument.presentationml.presentation";}else {contentType = "othertype";}return contentType;}}

2. 在solr的core目录下的solrconfig.xml增加如下内容:

 
     
      true
      ignored_ 

       text
     
 

其中 ignored_ 部分是把读取文件时不需要映射的字段忽略掉

  text  是把读取的fmap.content字段映射为solr的 text字段

3. 修改 managed-schema 文件,增加

 
 

这个是生成一个动态字段,类型为ignored,承接忽略的那些字段

4. 检查 solrconfig.xml

 
 

检查以上路径是否匹配,是相对于建立的mycore路径

5. 在mycore目录下建立lib目录(如果没有)

复制  solr-7.5.0/contrib/extraction/lib下的所有文件 到mycore/lib目录

复制 solr-7.5.0/dist/solr-cell-7.5.0.jar 到mycore/lib目录

6.重新启动solr,如正常启动,再在eclipse 运行第1步建立的java程序

7. 在solr网页查询可以检查到已上传doc文件的索引


推荐阅读
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 如何使用 `org.apache.tomcat.websocket.server.WsServerContainer.findMapping()` 方法及其代码示例解析 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 在Java项目中,当两个文件进行互相调用时出现了函数错误。具体问题出现在 `MainFrame.java` 文件中,该文件位于 `cn.javass.bookmgr` 包下,并且导入了 `java.awt.BorderLayout` 和 `java.awt.Event` 等相关类。为了确保项目的正常运行,请求提供专业的解决方案,以解决函数调用中的错误。建议从类路径、依赖关系和方法签名等方面入手,进行全面排查和调试。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • Java测试服务器调试指南详细介绍了如何进行远程调试,并深入解析了Java Xdebug参数的使用方法。本文首先概述了Java内置的调试功能,重点介绍了JDB这一类似于GDB的强大调试工具。通过实例演示,读者可以掌握在测试环境中高效调试Java应用程序的技巧,包括配置远程调试环境和优化调试参数,以提高开发效率和代码质量。 ... [详细]
  • 动态壁纸 LiveWallPaper:让您的桌面栩栩如生(第二篇)
    在本文中,我们将继续探讨如何开发动态壁纸 LiveWallPaper,使您的桌面更加生动有趣。作为 2010 年 Google 暑期大学生博客分享大赛 Android 篇的一部分,我们将详细介绍 Ed Burnette 的《Hello, Android》第三版中的相关内容,并分享一些实用的开发技巧和经验。通过本篇文章,您将了解到如何利用 Android SDK 创建引人入胜的动态壁纸,提升用户体验。 ... [详细]
  • PHP与MySQL的Web应用开发技术深入解析
    PHP与MySQL的Web应用开发技术深入解析 ... [详细]
author-avatar
聂依依mma
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有