精华内容
下载资源
问答
  • solr版本:8.4.1 springboot版本:2.3.0.RELEASE pdf.js:2.2.228 服务器环境:centos 使用场景 公司提出需要一个文库用来存放文档,并且要求可以全文检索,还要和自己的系统权限集成,部分文件还要求保密,...

    solr版本:8.4.1

    springboot版本:2.3.0.RELEASE

    pdf.js:2.2.228

    服务器环境:centos

     

    使用场景

    公司提出需要一个文库用来存放文档,并且要求可以全文检索,还要和自己的系统权限集成,部分文件还要求保密,打水印、不让复制、不让下载等等各种个性化的、奇葩的需求,然后发现现成的工具要么功能不满足,要么要花钱,没有一个可以满足老板的要求。

    具体实现步骤

    首先,我们考虑一下要用到的技术:全文检索、文件操作。

    • 全文检索有很多种可以选,那么我们考虑的时候就希望选一种最简单的,非常幸运的是solr和tika有集成插件。tika可以帮我们提取pdf的内容,当然不嫌麻烦的话可以自己去提取pdf的内容,自己提取的话虽然有点麻烦但是数据会更符合自己的使用场景需求。

    • 文件操作方面主要是给文件加水印和前端渲染,浏览器虽然可以直接渲染PDF但是不能实现搜索文本标亮,和定位。那么我选了pdf.js,主要也是因为可以偷懒。官方给的例子稍微改一下完全可以满足使用。

    其次,考虑一下流程,在什么时候给文件加水印呢?我当时的流程如下:

    从上图看得出,这里面我们自己编写的代码其实不多,实现效果如下:

     

    操作步骤:

    1.配置solr插件:抄袭借鉴solr-8.4.1/example/example-DIH/solr/tika文件价内的配置

    重点关注一下:solrconfig.xml里面的

    <requestHandler name="/dataimport" class="solr.DataImportHandler">
        <lst name="defaults">
          <str name="config">tika-data-config.xml</str>
        </lst>
      </requestHandler>

    看得出来是让我们把里面的内容好好抄袭借鉴一下。

    tika-data-config.xml
    
    <dataConfig>
      <dataSource type="BinFileDataSource"/>
      <document>
        <entity name="file" processor="FileListEntityProcessor" dataSource="null"
                baseDir="${solr.install.dir}/example/exampledocs" fileName=".*pdf"
                rootEntity="false">
    
          <field column="file" name="id"/>
    
          <entity name="pdf" processor="TikaEntityProcessor"
                  url="${file.fileAbsolutePath}" format="text">
    
            <field column="Author" name="author" meta="true"/>
            <!-- in the original PDF, the Author meta-field name is upper-cased,
              but in Solr schema it is lower-cased
             -->
    
            <field column="title" name="title" meta="true"/>
            <field column="dc:format" name="format" meta="true"/>
    
            <field column="text" name="text"/>
    	<field column="fileAbsolutePath" name="filePath" />
    	<field column="fileSize" name="size" />
    	<field column="fileLastModified" name="lastModified" />
         </entity>
        </entity>
      </document>
    </dataConfig>
    

    另外需要注意的是字段,managed-schema文件里面默认有几个字段,我配置了一个动态字段来获取pdf的内容,至于原因么,主要还是因为这个可以偷懒

    2.上传文件代码编写

    核心代码例子如下,重点是 attr_这里面会拿到所有需要的字段,path是上传后文件的路径,参数bytes是上传后的文件流转换的,另外我这里配置了solr自动id,不然还需要加一个literal.id

    public void indexFilesByTika(byte[] bytes,String path) throws IOException, SolrServerException {
            ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract");
            String contentType = "application/pdf";
            ContentStreamBase cs = new ContentStreamBase.ByteArrayStream(bytes,document.getFileName());
            cs.setContentType(contentType);
            up.addContentStream(cs);
            up.setParam("literal.path", path);
            up.setParam("uprefix", "attr_");
            up.setParam("fmap.content", "text");
            up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
            solrClient.request(up);
       }

    3.查询数据

    这时候需要注意的是水印,这个也很简单用itextpdf就可以了

            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itextpdf</artifactId>
                <version>5.5.13</version>
            </dependency>
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itext-asian</artifactId>
                <version>5.2.0</version>
            </dependency>
    
    
    	/**
    	 * 
    	 * @param text 水印文字
    	 * @param url 文件URL
    	 * @param os 输出流
    	 * @param widthExtra 水印的宽
    	 * @param heightExtra 水印的高
    	 * @throws DocumentException
    	 * @throws IOException
    	 */
    	public static void waterMark(String text, URL url, OutputStream os,int widthExtra,int heightExtra) throws DocumentException, IOException {
    		PdfReader reader = new PdfReader(url);
    		// 加完水印的文件
    		PdfStamper stamper = new PdfStamper(reader, os);
    		float width = reader.getPageSize(1).getWidth() / widthExtra;
    		float height = reader.getPageSize(1).getHeight() / heightExtra;
    		int total = reader.getNumberOfPages() + 1;
    		PdfContentByte content;
    		BaseFont font = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
    		for (int i = 1; i < total; i++) {
    			content = stamper.getOverContent(i);
    			content.saveState();
    			PdfGState gs = new PdfGState();
    			gs.setFillOpacity(0.2f);// 设置透明度为0.2
    			content.setGState(gs);
    			for (int j = 0; j < height; j++) {
    				for (int j2 = 0; j2 < width; j2++) {
    					content.beginText();
    					content.setColorFill(BaseColor.BLUE);
    					content.setFontAndSize(font, 24);
    					content.showTextAligned(Element.ALIGN_RIGHT, text, (float)widthExtra * j2, (float)heightExtra * j, 35);
    					content.endText();
    				}
    			}
    
    			content.restoreState();
    		}
    		stamper.close();
    	}
    

    4.前端页面接收与渲染

    修改pdf.js官方的例子,viewer.html,这里主要是改了渲染的方式,官方例子的渲染方式是通过文件渲染,修改后可以通过接口返回的二进制流渲染

    
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
        <meta name="google" content="notranslate">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>PDF.js viewer</title>
    
    
        <link rel="stylesheet" href="viewer.css">
    
    
        <!-- This snippet is used in production (included from viewer.html) -->
        <link rel="resource" type="application/l10n" href="./locale/locale.properties">
        <script src="../build/pdf.js"></script>
        <script src="jquery.min.js"></script>
    
        <script>
           
    
            function convertDataURIToBinary(dataURI) { //编码转换
                var raw = atob(dataURI);
                var rawLength = raw.length;
                var array = new Uint8Array(new ArrayBuffer(rawLength));
                for (i = 0; i < rawLength; i++) {
                    array[i] = raw.charCodeAt(i);
                }
                return array;
            }
            var DEFAULT_URL;
            var param = {};
            param.id = getQueryString("id");
            if (param.id != null) {
                var PDFData = "";
                var BASE64_MARKER = ';base64,';
                $.ajax({
                    url: '接口' + param.id,
                    type: "get",
                    async: false,
                    headers: {
                        'token': '123456'
                    },
                    contentType: "application/pdf;charset=utf-8",
                    beforeSend: function (request) {},
                    success: function (data) {
                        if (data.status == 1) {
                            DEFAULT_URL = convertDataURIToBinary(data.data);
                        }
                    }
                });
            }
        </script>
    
        <script src="viewer.js"></script>
    
    </head>

    至于怎么实现禁止复制黏贴和调用自身的find方法这个,请自己研究吧,最简单的方法就是通过禁用鼠标右键和键盘上一些组合键来实现禁止复制黏贴,找到viewer.js里面的搜索框方法和viewer.html的搜索框代码,在页面渲染结束后赋值再调用搜索方法。有点麻烦但是并不是很难。

    展开全文
  • 使用solr 检索word文档

    千次阅读 2019-06-27 10:06:02
    版权声明:本文为博主原创文章,转载注明出处即可。...Solr是Apache的顶级开源项目,使用java开发 ,基于Lucene的全文检索服务器。 Solr比Lucene提供了更多的查询语句,而且它可扩展、可配置,同时它...

    版权声明:本文为博主原创文章,转载注明出处即可。 https://blog.csdn.net/bskfnvjtlyzmv867/article/details/80940089

    I. Solr

    Solr简介

    Solr是Apache的顶级开源项目,使用java开发 ,基于Lucene的全文检索服务器。 Solr比Lucene提供了更多的查询语句,而且它可扩展、可配置,同时它对Lucene的性能进行了优化。

    Solr的全文检索流程

    • 索引流程: Solr客户端(浏览器、java程序)可以向Solr服务端发送POST请求,请求内容是包含Field等信息的一个xml文档,通过该文档,Solr实现对索引的维护(增删改)。
    • 搜索流程: Solr客户端(浏览器、java程序)可以向Solr服务端发送GET请求,Solr服务器返回一个xml文档。

    Solr同样没有视图渲染的功能。

    与Lucence区别

    Lucene是一个全文检索引擎工具包,它只是一个jar包,不能独立运行,对外提供服务。

    Solr是一个全文检索服务器,它可以单独运行在servlet容器,可以单独对外提供搜索和索引功能。Solr比Lucene在开发全文检索功能时,更快捷、更方便。

    II. Solr安装配置

    环境依赖

    Solr目录结构

    这里选择的是Windows平台的软件包,Solr7.4.0解压目录如下:

    • bin:包括一些使用Solr的重要脚本 
      <ul><li>solr和solr.cmd:分别用于Linux和Windows系统,根据所选参数不同而控制Solr的启动和停止</li>
      	<li>post:提供了一个用于发布内容的命令行接口工具。支持导入JSON,XML和CSV,也可以导入HTML,PDF,Microsoft Office格式(如MS Word),纯文本等等。</li>
      	<li>solr.in.sh和solr.in.cmd:分别用于Linux和Windows系统的属性文件</li>
      	<li>install_solr_services.sh:用于Linux系统将Solr作为服务安装</li>
      </ul></li>
      <li><strong>contrib</strong>:包含一些solr的一些插件或扩展&nbsp;
      <ul><li>analysis-extras: 包含一些文本分析组件及其依赖</li>
      	<li>clustering:包含一个用于集群搜索结果的引擎</li>
      	<li>dataimporthandler:把数据从数据库或其它数据源导入到solr</li>
      	<li>extraction:整合了Apache Tika,Tika是用于解析一些富文本(诸如Word,PDF)的框架</li>
      	<li>langid:检测将要索引的数据的语言</li>
      	<li>map-reduce:包含一些工具用于Solr和Hadoop Map Reduce协同工作</li>
      	<li>morphlines-core:包含Kite Morphlines,它用于构建、改变基于Hadoop进行ETL(extract、transfer、load)的流式处理程序</li>
      	<li>uima:包含用于整合Apache UIMA(文本元数据提取的框架)类库</li>
      	<li>velocity:包含基于Velocity模板的简单的搜索UI框架</li>
      </ul></li>
      <li><strong>dist</strong>:包含主要的Solr的jar文件</li>
      <li><strong>docs</strong>:文档</li>
      <li><strong>example</strong>:包含一些展示solr功能的例子&nbsp;
      <ul><li>exampledocs:这是一系列简单的CSV,XML和JSON文件,可以bin/post在首次使用Solr时使用</li>
      	<li>example-DIH:此目录包含一些DataImport Handler(DIH)示例,可帮助您开始在数据库,电子邮件服务器甚至Atom订阅源中导入结构化内容。每个示例将索引不同的数据集</li>
      	<li>files:该files目录为您可能在本地存储的文档(例如Word或PDF)提供基本的搜索UI</li>
      	<li>films:该films目录包含一组关于电影的强大数据,包括三种格式:CSV,XML和JSON</li>
      </ul></li>
      <li><strong>licenses</strong>:包含所有的solr所用到的第三方库的许可证</li>
      <li><strong>server</strong>:solr应用程序的核心,包含了运行Solr实例而安装好的Jetty servlet容器。&nbsp;
      <ul><li>contexts:这个文件包含了solr Web应用程序的Jetty Web应用的部署的配置文件</li>
      	<li>etc:主要就是一些Jetty的配置文件和示例SSL密钥库</li>
      	<li>lib:Jetty和其他第三方的jar包</li>
      	<li>logs:Solr的日志文件</li>
      	<li>resources:Jetty-logging和log4j的属性配置文件</li>
      	<li>solr:新建的core或Collection的默认保存目录,里面必须要包含solr.xml文件</li>
      	<li>configsets:包含solr的配置文件</li>
      	<li>solr-webapp:包含solr服务器使用的文件;不要在此目录中编辑文件(solr不是JavaWeb应用程序)</li>
      </ul></li>
      

    Solr的启动和关闭

    启动:cmd进入bin目录后

    solr start

    启动完成即可访问:http://localhost:8983/solr/

    关闭Solr需要指定端口:

    solr stop -p 8983

    创建Solr Core

    两种方法:

    1. 通过dos命令创建,进入bin目录,输入:solr create -c corename

      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706133733535"></p>
      
      <p>使用该命令会在/server/solr下就会出现新的文件夹corename(就是新创建的core)。</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706133802412"></p>
      </li>
      <li>
      <p>直接在/server/solr下创建新文件夹,自定义文件夹名称作为新的core。将/server/solr/configsets/_default目录下的conf文件夹,然后拷贝一份至自定义文件夹目录。</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706133916921"></p>
      
      <p>打开Solr面板,按照图中指示操作则可以添加新创建的collection2的Solr Core。</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706133940462"></p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/2018070613401297"></p>
      </li>
      

    III. Solr面板

    基础面板

    • Dashboard

      <p>仪表盘,显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm等信息。</p>
      </li>
      <li>
      <p>Logging</p>
      
      <p>Solr运行日志信息。</p>
      </li>
      <li>
      <p>Cloud</p>
      
      <p>Cloud即SolrCloud,即Solr云(集群),当使用Solr Cloud模式运行时会显示此菜单。</p>
      </li>
      <li>
      <p>Core Admin</p>
      
      <p>Solr Core的管理界面,在这里可以添加SolrCore实例。</p>
      </li>
      <li>
      <p>Java Properties</p>
      
      <p>Solr在JVM 运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息。</p>
      </li>
      <li>
      <p>Tread Dump</p>
      
      <p>显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息。</p>
      </li>
      <li>
      <p>Core Selector</p>
      
      <p>选择一个SolrCore进行详细操作。</p>
      </li>
      

    Core Selector

    • Analysis

      <p>通过Analysis界面可以测试索引分析器和搜索分析器的执行情况。在Solr中,<strong>分析器是绑定在域的类型中的</strong>。</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706134110790"></p>
      </li>
      <li>
      <p>Dataimport</p>
      
      <p>可以定义数据导入处理器,从关系数据库将数据导入到Solr索引库中。默认没有配置,需要手工配置。</p>
      </li>
      <li>
      <p>Documents</p>
      
      <p>通过/update表示更新索引,<strong>Solr默认根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新</strong>。</p>
      
      <p>通过此菜单可以<strong>创建索引、更新索引、删除索引</strong>等操作。</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706134226164"></p>
      </li>
      <li>
      <p>Query</p>
      
      <p>通过/select执行搜索索引,必须指定“q”查询条件方可搜索。</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706134305219"></p>
      </li>
      

    IV. Solr的基本使用

    在新建的slor core的conf文件夹里,存在重要的配置文件。

    • managed-schema:主要定义了索引数据类型,索引字段等信息。旧版的schema.xml文件。
    • solrconfig.xml:主要定义了Solr的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置。

    V. managed-schema

    field

    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />

    Field节点指定建立索引和查询数据的字段。

    • name:指定域的名称
    • type:指定域的类型
    • indexed:是否索引
    • stored:是否存储
    • required:是否必须
    • multiValued:是否多值,比如商品信息中,一个商品有多张图片,一个Field想存储多个值的话,必须将multiValued设置为true

    dynamicField

    <dynamicField name="*_i"  type="pint" indexed="true"  stored="true"/>

    dynamicField 表示动态字段,可以动态定义一个字段,只要符合规则的字段都可以。

    • name:指定动态域的命名规则,*_i只要以_i结尾的字段都满足这个定义。

    • type:指定域的类型

    • indexed:是否索引
    • stored:是否存储

    uniqueKey

    <uniqueKey>id</uniqueKey>

    指定唯一键。其中的id是在Field标签中已经定义好的域名,而且该域要设置为required为true。 一个managed-schema文件中必须有且仅有一个唯一键

    copyField

    <copyField source="cat" dest="_text_"/>

    通过copyField,可以把一个字段的值复制到另一个字段中,也可以把多个字段的值同时复制到另一个字段中,这样搜索的时候都可以根据一个字段来进行搜索。

    • source:要复制的源Field域的域名
    • dest:目标Field域的域名
    • 由dest指的的目标Field域,必须设置multiValued为true。

    fieldType

    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>
    

    fieldType节点主要用来定义域的类型。

    • name:指定域类型的名称
    • class:指定该域类型对应的solr的类型
    • analyzer:指定分析器
    • type:index、query,分别指定搜索和索引时的分析器
    • tokenizer:指定分词器
    • filter:指定过滤器
    • positionIncrementGap:可选属性,定义在同一个文档中此类型数据的空白间隔,避免短语匹配错误

    VI. solrconfig.xml

    datadir

    <dataDir>${solr.data.dir:}</dataDir>

    每个SolrCore都有自己的索引文件目录 ,默认在SolrCore目录下的data中。

    luceneMatchVersion

    <luceneMatchVersion>7.4.0</luceneMatchVersion>

    表示solr底层使用的是Lucene7.4.0版本

    lib

    <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />

    表示Solr引用包的位置,当dir对应的目录不存在时候,会忽略此属性。

    solr.install.dir:表示solrcore的安装目录。

    requestHandler

    <requestHandler name="/query" class="solr.SearchHandler">
        <lst name="defaults">
            <str name="echoParams">explicit</str>
            <str name="wt">json</str>
            <str name="indent">true</str>
        </lst>
    </requestHandler>

    requestHandler请求处理器,定义了索引和搜索的访问方式。 通过/update维护索引,可以完成索引的添加、修改、删除操作;通过/select搜索索引。

    设置搜索参数完成搜索,搜索参数也可以设置一些默认值,如下

    directoryFactory

    <directoryFactory name="DirectoryFactory"
                        class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}"/>

    定义索引的存储方案,共有以下存储方案:

    • solr.StandardDirectoryFactory——这是一个基于文件系统存储目录的工厂,它会试图选择最好的实现基于你当前的操作系统和Java虚拟机版本。
    • solr.SimpleFSDirectoryFactory——适用于小型应用程序,不支持大数据和多线程。
    • solr.NIOFSDirectoryFactory——适用于多线程环境,但是不适用在windows平台(很慢),是因为JVM还存在bug。
    • solr.MMapDirectoryFactory——这个是solr3.1到4.0版本在linux64位系统下默认的实现。它是通过使用虚拟内存和内核特性调用mmap去访问存储在磁盘中的索引文件。它允许lucene或solr直接访问I/O缓存。如果不需要近实时搜索功能,使用此工厂是个不错的方案。
    • solr.NRTCachingDirectoryFactory——此工厂设计目的是存储部分索引在内存中,从而加快了近实时搜索的速度。
    • solr.RAMDirectoryFactory——这是一个内存存储方案,不能持久化存储,在系统重启或服务器crash时数据会丢失。且不支持索引复制。

    VII. Solr发布至Tomcat

    从Solr5.0.0版本开始,Solr不提供可供直接发布的war包,需要我们自己重新整合。

    在将Solr发布至Tomcat之前,我们需要了解solrhome和solrcore的概念。

    • solrhome:solrhome是solr服务运行的主目录,一个solrhome目录里面包含多个solrcore目录 ;
    • solrcore:solrcore目录里面了一个solr实例运行时所需要的配置文件和数据文件,每一个solrcore都可以单独对外提供搜索和索引服务,多个solrcore之间没有关系;

    1530778599893

    下面进行将Solr发布到Tomcat8.5。

    拷贝工程文件夹

    1. 将 solr-7.1.0\server\solr-webapp 下的webapp复制到 tomcat\webapps,并改名为solr;

      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706134612533"></p>
      </li>
      <li>
      <p>定义我们的solr_home,这里定义在D:\Apache\apache-tomcat-8.5.11\solr_home位置;</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706134730876"></p>
      </li>
      <li>
      <p>将 solr-7.1.0 下的contrib和dist文件夹复制到指定的solrhome目录下;</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706134838846"></p>
      </li>
      <li>
      <p>将 solr-7.1.0\server\solr下的文件复制到solrhome目录下。</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706134922762"></p>
      </li>
      

    复制相关的jar包

    1. 将\server\lib\ext中所有的.jar文件复制到tomcat\webapps\solr\WEB-INF\lib中;

      <p><img alt="" class="has" src="https://img-blog.csdn.net/2018070613495565"></p>
      </li>
      <li>
      <p>将\server\lib下的metrics-*.jar复制到tomcat\webapps\solr-7.1.0\WEB-INF\lib中;</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706135017395"></p>
      </li>
      <li>
      <p>将\server\lib下的gmetric4j-1.0.7.jar复制到tomcat\webapps\solr-7.1.0\WEB-INF\lib中;</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706135035381"></p>
      </li>
      

    修改web.xml文件

    1. 配置solrhome;

      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706135131496"></p>
      </li>
      <li>
      <p>修改授权信息:找到标签,位置在文件最后,将的内容注释掉,大概意思就是开放solr权限。</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706135154972"></p>
      </li>
      

    日志配置

    1. 在tomcat\webapps\solr\WEB-INF目录下新建目录classes ,并将\server\resources下的log4j2.xml复制到新建的classes文件夹中;

      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706135234317"></p>
      </li>
      <li>
      <p>修改tomcat的bin目录下catalina.bat脚本,增加solr.log.dir系统变量,指定solr日志记录存放地址。</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706135312518"></p>
      </li>
      

    启动测试

    启动Tomcat,访问http://localhost:8080/solr/index.html

    VIII. 连接MySQL

    利用slor core的Dataimport面板可以将数据库中指定的sql语句的结果导入到solr索引库中。

    选定Core

    可以重新定义一个新的Core,也可以选择现有的core(这里选择collection1,并改名为tb_item)

    1. 在solrcore的conf目录下,有一个solrconfig.xml的配置文件,该配置文件用于配置solrcore的运行信息;

    2. 修改lib标签设置的路径;

      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706135428911"></p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706135449326"></p>
      </li>
      

    导入依赖包

    1. 将mysql-connector-java-x.x.x.jar拷贝到…\solr_home\contrib\db下;

      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706135509283"></p>
      </li>
      <li>
      <p>查看…\solr_home\dist下有没有 solr-dataimporthandler-7.4.0.jar,如果没有则去下载的代码拷贝一份;</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706135545797"></p>
      </li>
      <li>
      <p>在solrconfig.xml中配置jar包的lib标签;</p>
      
      <pre class="has" name="code"><code class="hljs xml"><span class="hljs-comment">&lt;!-- 配置dataimport和mysql --&gt;</span>
      

    <lib dir="KaTeX parse error: Can't use function '\.' in math mode at position 112: …ljs-string">".*\̲.̲jar"</span> /&g…{solr.install.dir:…}/dist/" regex=“solr-dataimporthandler-7.4.0.jar” />

    <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706135626269"></p>
    </li>
    

    配置连接信息

    1. 找到选定的Core(tb_item)下的solrconfig.xml文件,在solrconfig.xml中,添加一个dataimport的requestHandler;

      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706135653420"></p>
      </li>
      <li>
      <p>在solrconfig.xml同一位置下创建data-config.xml 文件;</p>
      
      <p>对应的数据库商品表为:</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/2018070613572746"></p>
      </li>
      

    配置Field域

    tb_item的表结构:

    在选定的Core(tb_item)的conf下,打开managed-schema文件,在其中定义Field域。Field域的name属性需要和data-config.xml 的一致。

    <!-- 配置商品表的Field -->
    <!-- 商品id -->
    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <!-- 商品名称 -->
    <field name="title" type="string" indexed="true" stored="true" />
    <!-- 商品卖点 -->
    <field name="sellPoint" type="string" indexed="true" stored="true" />
    <!-- 商品条形码 -->
    <field name="barcode" type="string" indexed="true" stored="true" />
    <!-- 图片地址 -->
    <field name="image" type="string" indexed="false" stored="true" />
    <!-- 价格 -->
    <field name="price" type="string" indexed="false" stored="true" />
    <!-- 类别id -->
    <field name="cid" type="string" indexed="false" stored="true" />
    <!-- 数量 -->
    <field name="num" type="string" indexed="false" stored="true" />
    <!-- 状态 -->
    <field name="status" type="string" indexed="false" stored="true" />
    <!-- 创建时间 -->
    <field name="created" type="string" indexed="false" stored="true" />
    <!-- 更新时间 -->
    <field name="updated" type="string" indexed="false" stored="true" />
    
    <!-- 目标域 -->
    <field name="tb_item_keywords" type="string" indexed="true" stored="true" multiValued="true" />
    
    <!-- 将商品名称和卖点加入目标域 -->
    <copyField source="title" dest="tb_item_keywords" />
    <copyField source="sellPoint" dest="tb_item_keywords" />

    启动测试

    1. 重启Tomcat,打开Solr的Dataimport面板;

      <p><img alt="" class="has" src="https://img-blog.csdn.net/20180706135830359"></p>
      </li>
      <li>
      <p>选择entity,点击Execute执行。</p>
      
      <p><img alt="" class="has" src="https://img-blog.csdn.net/2018070613584633"></p>
      </li>
      

    IX. 中文分词

    找到Solr7自带的中文分词器,solr_home\contrib\analysis-extras\lucene-libs下的lucene-analyzers-smartcn-7.4.0.jar。

    配置solrconfig.xml中配置jar包的lib标签:

    在managed-shchema添加中文分词的FieldType:

    <!-- 中文分词 -->
    <fieldType name="cn_text" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
        </analyzer>
    </fieldType>

    修改商品名称、卖点以及目标域的Type为新定义的cn_text:

    <!-- 商品名称 -->
    <field name="title" type="cn_text" indexed="true" stored="true" />
    <!-- 商品卖点 -->
    <field name="sellPoint" type="cn_text" indexed="true" stored="true" />
    <!-- 目标域 -->
    <field name="tb_item_keywords" type="cn_text" indexed="true" stored="true" multiValued="true" />

    删除之前导入的索引:

    <delete><query>*:*</query></delete><commit/> 

    重启solr服务,导入数据。利用Query面板,查询sellPoint:卖点,得到155条结果表明分词成功。

    X. SolrJ客户端

    SolrJ简介

    Solrj就是Solr服务器的java客户端,提供索引和搜索的请求方法。SolrJ通常嵌入在业务系统中,通过solrJ的API接口操作Solr服务。

    搭建工程

    拷贝Jar包,共有三处:

    添加/修改索引

    在solr中,索引库中都会存在一个唯一键。如果一个Document的id存在,则执行修改操作,如果不存在,则执行添加操作。

    @Test
    public void insertOrUpdateIndex() throws IOException, SolrServerException {
        // solr服务的url,tb_item是前面创建的solr core
        String url = "http://localhost:8080/solr/tb_item";
        // 创建HttpSolrClient
        HttpSolrClient client = new HttpSolrClient.Builder(url)
            .withConnectionTimeout(5000)
            .withSocketTimeout(5000)
            .build();
    
        // 创建Document对象
        SolrInputDocument document = new SolrInputDocument();
        document.addField("id", "1111");
        document.addField("title", "Solr入门");
        document.addField("sellPoint", "Solr版本差异也太大了");
    
        client.add(document);
    
        client.commit();
    }

    查询插入结果:

    1530799029274

    修改titile为Solr进阶,再次运行代码,查询结果:

    删除索引

    • 根据指定ID来删除

      <pre class="has" name="code"><code class="hljs java"><span class="hljs-meta">@Test</span>
      

    public void deleteIndex() throws IOException, SolrServerException {
    String url = http://localhost:8080/solr/tb_item;
    HttpSolrClient client = new HttpSolrClient.Builder(url)
    .withConnectionTimeout(5000)
    .withSocketTimeout(5000)
    .build();
    client.deleteById(“1111”);
    client.commit();
    }


  • 根据条件删除

  • <pre class="has" name="code"><code class="hljs java"><span class="hljs-comment">// 根据条件删除</span>
    

    client.deleteByQuery(“id:1111”);
    // 全部删除
    client.deleteByQuery(":");

    简单查询

    @Test
        public void simpleSearch() throws IOException, SolrServerException {
            String url = "http://localhost:8080/solr/tb_item";
            HttpSolrClient client = new HttpSolrClient.Builder(url)
                    .withConnectionTimeout(5000)
                    .withSocketTimeout(5000)
                    .build();
            // 创建SolrQuery
            SolrQuery query = new SolrQuery();
            // 输入查询条件
            query.setQuery("sellPoint:手机");
            // 执行查询并返回结果
            QueryResponse response = client.query(query);
            // 获取匹配的所有结果
            SolrDocumentList list = response.getResults();
            // 匹配结果总数
            long count = list.getNumFound();
            System.out.println("总结果数:" + count);
    
            for (SolrDocument document : list) {
                System.out.println(document.get("id"));
                System.out.println(document.get("title"));
                System.out.println(document.get("sellPoint"));
                System.out.println(document.get("num"));
                System.out.println(document.get("created"));
                System.out.println(document.get("updated"));
                System.out.println("================");
            }
    
        }

    条件查询

    • q - 查询关键字,必须的,如果查询所有使用*:*。请求的q是字符串;
    • fq - (filter query)过虑查询,在q查询符合结果中同时是fq查询符合的。例如:请求fq是一个数组(多个值);
    • sort - 排序;
    • start - 分页显示使用,开始记录下标,从0开始;
    • rows - 指定返回结果最多有多少条记录,配合start来实现分页;
    • fl - 指定返回那些字段内容,用逗号或空格分隔多个 ;
    • df-指定一个搜索Field;
    • wt - (writer type)指定输出格式,可以有 xml, json, php, phps;
    • hl 是否高亮,设置高亮Field,设置格式前缀和后缀。
    • facet 查询分组的数量(可与查询同步执行)
    • group 查询每个分组前几条的数据

    1530842397104

    SolrJ实现复杂条件查询:

    @Test
    public void complexSearch() throws IOException, SolrServerException {
        String url = "http://localhost:8080/solr/tb_item";
        HttpSolrClient client = new HttpSolrClient.Builder(url)
            .withConnectionTimeout(5000)
            .withSocketTimeout(5000)
            .build();
        SolrQuery query = new SolrQuery();
        // 输入查询条件
        query.setQuery("title:手机 AND sellPoint:移动");
        // 设置过滤条件
        query.setFilterQueries("id:[1000000 TO 1200000]");
        // 设置排序
        query.addSort("id", SolrQuery.ORDER.desc);
        // 设置分页信息(使用默认的)
        query.setStart(2);
        query.setRows(2);
        // 设置显示的Field的域集合(两种方式二选一)
        // query.setFields(new String[]{"id", "title", "sellPoint", "price", "status" });
        query.setFields("id,title,sellPoint,price,status");
        // 设置默认域
        // query.set("df", "product_keywords");
        // 设置高亮信息
        query.setHighlight(true);
        query.addHighlightField("title");
        query.setHighlightSimplePre("<span color='red'>");
        query.setHighlightSimplePost("</span>");
    
        // 执行查询并返回结果
        QueryResponse response = client.query(query);
        // 获取匹配的所有结果
        SolrDocumentList list = response.getResults();
        // 匹配结果总数
        long count = list.getNumFound();
        System.out.println("总结果数:" + count);
    
        // 获取高亮显示信息
        Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
        for (SolrDocument document : list) {
            System.out.println(document.get("id"));
            List<String> list2 = highlighting.get(document.get("id")).get("title");
            if (list2 != null)
                System.out.println("高亮显示的商品名称:" + list2.get(0));
            else {
                System.out.println(document.get("title"));
            }
    
        }
    }


    group

    solrQuery.setParam(GroupParams.GROUP,true);
    solrQuery.setParam(GroupParams.GROUP_FIELD,"id");
    // 设置每个quality对应的
    solrQuery.setParam(GroupParams.GROUP_LIMIT,"1");
    
    GroupResponse groupResponse =queryResponse.getGroupResponse();
    if(groupResponse !=null) {
         List<GroupCommand> groupList =groupResponse.getValues();
         for(GroupCommand groupCommand : groupList){
              List<Group> groups =groupCommand.getValues();
              for(Group group : groups) {
                System.out.println(group.getGroupValue()+"\t"+group.getResult().getNumFound());
              }
         }
    }

    facet

    //查询分组数量
    solrQuery.setFacet(true);
    solrQuery.setFacetLimit(100);
    solrQuery.setFacetMissing(false);
    solrQuery.addFacetField("id");
    
    List<FacetField.Count> counts;
    List<FacetField> facetFieldList = queryResponse.getFacetFields();
    for (FacetField facetField : facetFieldList) {
        System.out.println(facetField.getName()+"\t"+facetField.getValueCount());
        counts = facetField.getValues();
        if (counts != null) {
            for (FacetField.Count count : counts) {
                 System.out.println(count.getName()+" "+count.getCount());
             }
        }
    }

     

    展开全文
  • Solr 教程 pdf

    2017-04-11 18:42:15
    solr教程、由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引 擎的功能需求,目前在实现搜索引擎的方案上有集中方案可供选择:
  • 使用solr检索doc、xls、txt等文件的时候,报错: Exception in thread "main" org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: org.apache.tika.exception.TikaException: Error creating...

    一、问题描述

    使用solr检索doc、xls、txt等文件的时候,报错:

    Exception in thread "main" org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: org.apache.tika.exception.TikaException: Error creating OOXML extractor
    	at org.apache.solr.client.solrj.impl.HttpSolrServer.executeMethod(HttpSolrServer.java:621)
    	at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:228)
    	at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:224)
    	at solr.ReadHadoopFile.indexFilesSolrCell(ReadHadoopFile.java:65)
    	at solr.ReadHadoopFile.main(ReadHadoopFile.java:25)

    调试的时候,发现在提交ContentStreamUpdateRequest 时候报错!

    ContentStreamUpdateRequest up = new ContentStreamUpdateRequest(
                    "/update/extract");
    ....
    solr.request(up);
    

    二、问题原因

    一步一步调试,走发现读取一个docx文件的时候报错。百思不得解,而且这个报错网上没有类似的报错,痛苦思索,灵光一现考虑:是否会因为那个docx文档打开了,不能访问。赶紧关闭,发现一起ok,世界清净了!

    三、解决办法

    把打开的docx文件关闭,即可!

    展开全文
  • Solr文档.pdf

    2018-05-28 00:07:24
    Solr 全文检索服务Solr 全文检索服务Solr 全文检索服务Solr 全文检索服务Solr 全文检索服务Solr 全文检索服务
  • solr全文检索

    2019-10-14 14:01:04
    一、solr安装 从solr官网下载并解压:http://archive.apache.org/dist/lucene/solr/ 二、solr命令 进入solr->bin 启动:solr start [-p 8983] 访问http://localhost:8983/solr 停止:solr stop -all ...

    一、solr安装

    从solr官网下载并解压:http://archive.apache.org/dist/lucene/solr/

    二、solr命令

    进入solr->bin

    启动:solr start [-p 8983]

            访问 http://localhost:8983/solr

    停止:solr stop -all

    重启:solr restart -p 8983

    创建core: solr create -c test_core

    三、连接mysql数据库

    1、需要将相应的数据库驱动的jar包导入到server\solr-webapp\webapp\WEB-INF\lib下

    2、在server\solr下找到自己的核心源的文件夹,打开conf文件夹,我们需要配置solrconfig.xml,managed-schema以及增加一个数据库配置文件。

    配置solrconfig.xml

    (1)数据库solr的jar包引入,找到对应配置位置加入如下配置

    <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />

    (2)增加数据库配置xml文件,找到/select的requestHandler,在上面加入,其中config里面为之后增加的数据库配置文件名字(db-data-config.xml)

    <requestHandler name="/dataimport" class="solr.DataImportHandler">
        <lst name="defaults">
          <str name="config">db-data-config.xml</str>
        </lst>
      </requestHandler>

    3. 在conf文件夹下,新增配置数据库的xml文件,dataSource中配置数据库数据,type为类型,driver为对应数据库的驱动类,url为数据库地址,user为数据库账户,password为数据库密码。entity为需要的查询数据库语句,图中为查询表 v-solr里面的数据,下面的field为查出的数据需要向solr中存储的字段已经对应存入到solr中的字段名称。

     

     

    <dataConfig>
        <dataSource driver="com.mysql.jdbc.Driver" 
    				url="jdbc:mysql://127.0.0.1:3306/orders?charactorEncoding=utf-8" 
    				user="root" 
    				password="123456" />
        <document>
            <!--<entity name="share" query="select * from product" 
    							deltaImportQuery="select * from product where CREATE_TIME > '${dataimporter.last_index_time}'"
    							deltaQuery="select * from product where CREATE_TIME > '${dataimporter.last_index_time}'" 
    							pk="ID" >
                <field column="ID" name="id" />
    			<field column="PRODUCT_NAME" name="productName" />
    			<field column="PRODUCT_DESC" name="productDesc" />
    			<field column="CREATE_TIME" name="createTime" />
    			<field column="UPDATE_TIME" name="updateTime" />
            </entity>-->
    		<entity name="v_solr" query="select * from v_solr" 
    			deltaImportQuery="select * from v_solr"
    			deltaQuery="select * from v_solr"
    		pk="id">
    			<field column="id" name="id"/>
    			<field column="title" name="searchTitle"/>
    			<field column="content" name="searchContent"/>
    		</entity>
    		
        </document>
    </dataConfig>

    4.配置managed-schema。这个文件是对应第三步里面的xml来配置的。里面增加第三步查询里面的字段的对应解析配置

    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
       <field name="searchTitle" type="text_ik" indexed="true" stored="true" />
       <field name="searchContent" type="text_ik" indexed="true" stored="true" />
       <!-- 索引复制,联合索引 -->
       <field name="keyword" type="text_ik" indexed="true" stored="true" omitNorms="true" multiValued="true"/>
       <copyField source="id" dest="keyword" maxChars="30000"/>
       <copyField source="searchTitle" dest="keyword" maxChars="30000"/>
       <copyField source="searchContent" dest="keyword" maxChars="30000"/>

    5.文件配置成功后,在控制台点击如图所示按钮,导入数据

    6.查询数据是否导入,如图所示,导入成功

    四、文件搜索

    1、在server\solr下找到自己的核心源的文件夹,打开conf文件夹,我们需要配置solrconfig.xml,managed-schema以及增加一个数据库配置文件。参考连接mysql数据库

    2、配置tika-data-config.xml

    <dataConfig>
      <dataSource type="BinFileDataSource"/>
      <document>
        <entity name="file" processor="FileListEntityProcessor" dataSource="null"
                baseDir="${solr.install.dir}/files/file_repos" fileName=".*\.(DOC)|(PDF)|(pdf)|(doc)|(docx)|(ppt)|(txt)|(log)|(xls)|(xlsx)|(csv)|(json)"
                rootEntity="false" onError="skip" recursive="true">
    
          
    		<field column="fileAbsolutePath" name="id" />
    		<field column="fileSize" name="size" />
    		<field column="fileLastModified" name="lastModified" />
    		<entity name="tika-test" dataSource="bin" processor="TikaEntityProcessor"
    				url="${file.fileAbsolutePath}" format="text" onError="skip">                
    			<field column="Author" name="author" meta="true"/>
    			<field column="title" name="title" meta="true"/>
    			<field column="dc:format" name="format" meta="true"/>
    			<field column="text" name="content"/> 				           
    		</entity>
    	  
        </entity>
      </document>
    </dataConfig>

    3、配置managed-schema

    五、IK Analyzer(中文分词器)

    1、分词器下载地址https://github.com/EugenePig/ik-analyzer-solr5

    2、把ik-analyzer-solr5-5.x.jar拷贝到Solr中的应用服务下:

    3、配置managed-schema

    在managed-schema里,添加

    <fieldType name="text_ik" class="solr.TextField">   
      <analyzer type="index">
        <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" />
      </analyzer>
      <analyzer type="query">
        <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" />
      </analyzer>
    </fieldType>

    或者

    <fieldType name="text_ik" class="solr.TextField">   
      <analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
      <analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
    </fieldType>

    把需要分词的字段,设置为text_ik

     

    六、springboot+solr

    1、在pom.xml 添加依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-data-solr</artifactId>
    </dependency>

    2、application.properties

    # solr
    spring.data.solr.host=http://localhost:8983/solr/

    application.yml

    spring:
      data:
        solr:
          host: http://127.0.0.1:8080/solr

    具体项目地址参考:https://gitee.com/1255480095/springboot-solr

     

     

     

     

     

     

     

    展开全文
  • Solr索引pdf.txt.word等文件

    千次阅读 2016-04-14 21:33:46
    这里用的solr4.7 首先搭建环境  创建一个新core  这里有详细的资料  http://blog.csdn.net/clj198606061111/article/details/21288499/ 修改core0里面的xml  schema.xml 加入
  • solr增强hbase检索.

    2019-01-16 14:54:27
    solr增强hbase检索...1547548620.pdf.
  • solr全文检索入门

    千次阅读 2019-01-09 12:09:57
    文章目录安装启动创建core配置core索引MySQL数据3.2.13.2.23.2.3测试定时更新五、配置中文分词SolrJ ...从官网下载Solr7.4(或本资源包内直接解压,本包内也是官网下载的) 下载地址:https://mirrors.tuna.tsinghu...
  • Solr7.4全文检索服务器

    千次阅读 2018-08-31 11:05:29
    版权声明:本文为博主原创文章,转载注明出处即可。...Solr是Apache的顶级开源项目,使用java开发 ,基于Lucene的全文检索服务器。 Solr比Lucene提供了更多的查询语句,而且它可扩展、可配置,同时它对Lucene的性能...
  • solr8版本与tomcat整合教程 solr安装配置教程 傻瓜式教程 亲测有效
  • 介绍 Solr是一款开源的全文检索引擎,基于lucene。拥有完善的可配置功能界面。具有丰富的查询语言,可扩展,可优化。 下载安装 进入solr官网下载包(这里我使用的版本是8.0) ...
  • I. Solr Solr简介 Solr是Apache的顶级开源项目,使用java开发 ,基于...Solr的全文检索流程 索引流程: Solr客户端(浏览器、java程序)可以向Solr服务端发送POST请求,请求内容是包含Field等信息的一个xml文...
  • 全文检索引擎Solr

    2016-04-17 15:05:51
    本教程以solr4.8作为测试环境,jdk版本需要1.7及以上版本。 准备 本文假设你对Java有初中级以上水平,因此不再介绍Java相关环境的配置。下载解压缩solr,在example目录有start.jar文件,启动: ...
  • Java实现全文检索-Solr

    2019-11-28 16:47:08
    Java实现全文检索-SolrSolr是什么?Solr Vs Lucene搭建Solr服务器(Mac系统)Solr搭载IKAnalyer分词器 Solr是什么? Solr是一个基于全文检索的企业级应用服务器;全文检索,可以通过分词来检索数据;应用服务器:它...
  • solr查询语法.pdf

    2017-02-23 16:40:00
    排序 / 高亮 / facet / spellcheck:拼写检查 / spatial:空间搜索 / 检索运算符:
  • 作者:JasonGofen链接:https://www.jianshu.com/p/95869ade37b3本文内容主要讲解Solr 7.7.1 环境搭建后使用Spring boot 2...
  • 压缩包内含有solr+ik如何配置的详细介绍以及solr+ik的安装包,省去了自己去找地址下载的麻烦,经测试使用完全可以在电商电商项目中实现全文检索
  • 基于pdf的样例,1.2两部只有在新增的时候才会用到,查询不需要 1.需要配置支持这一功能的requestHandler。编辑solrconfig.xml,加入 <requestHandler name="/update/extract" startup="lazy" class="solr....
  • 全文检索引擎Solr系列——入门篇Solr采用Lucene搜索库为核心,提供全文索引和搜索开源企业平台,提供REST的HTTP/XML和JSON的API,如果你是Solr新手,那么就和我一起来入门吧!本教程以solr4.8作为测试环境,jdk版本...
  • 以下是我准备的两个文件: C:\solrfile\data\鹅鹅鹅.pdf C:\solrfile\data\静夜思.docx 步骤2:搭建Spring boot项目 创建项目,在pom.xml引入SolrJ的Maven依赖 org.apache.solr solr-solrj 7.7.1 org.apache.tika ...
  • 下载4.8.0版本,下载地址:http://archive.apache.org/dist/lucene/solr/4.8.0/ 解压后,得到文件夹视图如下: ...D:\soft\apache\solr\solr-4.8.0\example>java -jar start.jar 浏览器访问:http://loc...
  • solr读取word,pdf

    万次阅读 热门讨论 2011-06-10 10:52:00
    这两天一直纠结是用lucene来做搜索应用,还是用solr来做搜索应用。lucene只提供一个可查询的包,用它来实现搜索的好处是,应用需要什么,我就用它提供的相应功能即可。而solr本身就是基于lucene的应用,对lucene又做...
  • solr

    2021-02-04 16:45:16
    最近项目需要做pdf,word等的检索,一路走来有许多坑,也有许多收获,特此做一下记录. 这篇主要是对数据库的操作: 1.solr分词器的安装,http://download.csdn.net/download/u011277123/9994225,下载后参照此篇...
  • 全文检索引擎Solr系列——入门篇
  • solr6.5.1搜索PDF格式的文件

    千次阅读 2017-06-09 09:40:14
    baseDir="这里写要搜索的地址" fileName=".*.(doc)|(pdf)|(xls)|(ppt)|(docx)" recursive="true"> ${files.fileAbsolutePath}" format="text" transformer="HTMLStripTransformer,RegexTransformer,script:...
  • 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;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,984
精华内容 793
关键字:

solr检索pdf