`

DOC和PDF一样索引文件 - Solr 和 Tika 整合

阅读更多

在一些博文中已经描述过如何索引二进制文件,即为Word文件、PDF文件和 LibreOffice文档创建索引。在此,利用数据导入处理程序(Data Import Handler)实现同样的功能。不久前 Solr 服务器发布了新的版本(3.1),本文内容就基于此新版本加以描述。本文值目的是给出应用样例 - 所有变更以此样例应用为准。

假设

 我们假设数据是可用的XML格式,并包含文档基本信息,以及定位文档的文件名,文件位于一定义的目录下。示例文件如下:

<?xml version="1.0" encoding="utf-8"?>
<albums>
    <album>
        <author>John F.</author>
        <title>Life in picture</title>
        <description>1.jpg</description>
    </album>
    <album>
        <author>Peter Z.</author>
        <title>Simple presentation</title>
        <description>2.pptx</description>
    </album>
</abums>

如上所示,文件数据由单个元素构成,并无唯一标识符,但可以处理(此类数据)。

首先修改(XML)模式,增加一字段,用以保存文件内容:

<field name="content" type="text" indexed="true" stored="true" multiValued="true"/>

接着,修改solrconfig.xml,补充DIH 配置:

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

由于将使用额外定位的实体处理器(TikaEntityProcessor),所以需要修改加载DIH库的(配置)行:

<dataConfig>
    <script><![CDATA[
        id = 1;
        function GenerateId(row) {
            row.put('id', (id ++).toFixed());
            return row;
        }       
       ]]></script>
   <dataSource type="BinURLDataSource" name="data"/>
    <dataSource type="URLDataSource" baseUrl="http://localhost/tmp/bin/" name="main"/>
    <document>
        <entity name="rec" processor="XPathEntityProcessor" url="data.xml" forEach="/albums/album" dataSource="main" transformer="script:GenerateId">
            <field column="title" xpath="//title" />
            <field column="description" xpath="//description" />
            <entity processor="TikaEntityProcessor" url="http://localhost/tmp/bin/${rec.description}" dataSource="data">
                <field column="text" name="content" />
                <field column="Author" name="author" meta="true" />
                <field column="title" name="title" meta="true" />
            </entity>
        </entity>
    </document>
</dataConfig>

生成记录标识符 - 脚本

第一个有趣的特点是使用标准ScriptTransformer生成文档标识符。用javascript “GenerateId”方法和一个对它的引用(transformer=“script:GenerateId”) ,每条记录将被编号。坦率地说,这不是太好的处理缺乏标识符的方法,因为它不允许增量索引(我们无法区分各种版本的记录) - 用在这里只是显示修改记录多么容易。如果你不喜欢Javascript,您可以使用Java6支持的任何脚本语言。

使用多个数据源

另一个有趣的因素是多个数据源的使用。由于元数据由XML文件提供,需要下载这个文件;使用标准方法:定义UrlDataSource,然后用XpathEntityProcessor 分析传入的数据。既然要下载每个记录的二进制附件,定义了一个额外的数据源:BinURLDataSource和其他实体,使用TikaEntityProcessor;现在只需要通知实体在哪里下载文件(url 属性引用该实体-父)和使用那个数据源的提示(dataSource属性);辅以一被索引的字段列表(附加的 meta 属性是指从文件元数据中检索的数据)。

可用字段

Apache  Tika 允许您下载许多来自文件的其他数据。上例中只用了 文档的标题(title)、作者(author)和内容(content)。有关可用字段的完整的信息都包含在由Metadata类实现的接口中(http://tika.apache.org/0.9/api/org/apache/tika/metadata/Metadata.html)-- 其中定义的常量。特别有趣的是DublinCoreMSOFFICE

结论

启动Solr不久后将运行导入过程(调用地址:http://localhost:8983/solr/dataimport?command=full-import),文件将被索引,发送下列查询到Solr后,可见查询结果:http://localhost:8983/solr/select?q=*:*  。
分享到:
评论

相关推荐

    跟益达学Solr5之使用Tika从PDF中提取数据导入索引

    在本篇博文中,“跟益达学Solr5之使用Tika从PDF中提取数据导入索引”,我们将探讨如何利用Apache Solr 5和Tika这两个强大的开源工具,从PDF文档中抽取数据并将其有效地导入到Solr索引库中。Apache Solr是一款功能...

    tika读取文件专用包

    - 引入Tika所需的jar包,包括`tika-core`和特定格式的解析器,如`tika-parsers`,这个压缩包中的`mapper-attachments`可能就是针对附件处理的模块。 - 创建`TikaConfig`实例,加载配置信息。 - 创建`Parser`实例...

    tika提取文本内容

    1. **MIME类型识别**:Tika通过使用Apache Tika-Mime库来识别文件的MIME类型,这是确定如何解析文件的关键步骤。MIME类型是一种标准,用来定义文件在网络上传输时的数据类型和格式。 2. **解析器架构**:Tika的解析...

    跟益达学Solr5之索引文件夹下所有文件

    例如,文本文件可以使用`Tika`库进行内容提取,而图片或PDF等非文本文件可能需要额外的处理步骤,如OCR(光学字符识别)来获取可搜索的文本。 总的来说,索引文件夹下所有文件是Solr实现大数据量搜索的关键步骤。...

    solr7.5官方文档

    **Solr 配置文件**:详细解释了 Solr 的各种配置文件及其作用,例如 `solrconfig.xml` 和 `schema.xml` 等,这些配置决定了 Solr 的行为和性能。 **将 Solr 应用于生产环境**:讨论了将 Solr 部署到生产环境时需要...

    Lucene3.0做的文件搜索

    例如,对于PDF或DOC文件,可以使用BinaryField来存储二进制内容,然后使用Tika或者Apache POI库进行解析,提取文本内容用于索引。 **3. 分析器的选择与自定义** Lucene中的Analyzer负责分词和词形还原等任务。3.0...

    Lucene入门指南

    此段代码展示了如何索引文件的路径、文件修改日期以及文件内容。通过这些基本信息,Lucene 可以为后续的查询提供高效的数据检索服务。 通过以上介绍,我们不仅了解了 Lucene 的基本概念、与相关项目的联系,还深入...

    lucene 高级搜索项目

    附件搜索是指对文件(如PDF、DOC等)内容的检索。这需要将附件内容读取并提取成可搜索的文本,通常通过第三方库(如Apache Tika)进行解析。 **5. 全文搜索** `04_lucene_advance_searcher`可能详细讲解了如何实现...

    JavaEE学习课程分享精英强化班腾科.doc

    - Lucene入门、分词器、索引库操作、Tika工具使用、Solr原理及使用。 #### 五、JavaEE重量级框架应用开发 - **EJB 3.0标准**: 介绍企业级JavaBean的概念和技术特点。 - **JBoss、WebLogic服务器**: 应用部署和配置...

    Lucene In Action

    3. **编写简单的索引和查询代码**:通过简单的示例代码来熟悉 Lucene 的基本使用方法。 #### 二、索引(Indexing) **索引** 是 Lucene 的核心功能之一。它是指将文档转换为可搜索的形式并存储的过程。索引过程中,...

    基于java下的搜索引擎的设计与实现.doc

    这些任务可以通过开源的Java库如Apache Tika和Stanford NLP来完成,它们能够解析文档格式、识别语言并进行文本分析。 3. **索引(Indexing)**:将预处理后的文本转换成可快速检索的数据结构,如倒排索引。Apache ...

Global site tag (gtag.js) - Google Analytics