Tika - url /文件路径问题

时间:2014-06-04 11:45:14

标签: solr solr4 dataimporthandler apache-tika

我正在使用Solr和DataimportHandler来索引丰富的文档,如pdf,word,image等 我正在使用TikaEntityProcessor从文件中提取内容。

我有一个关于将值设置为'url'条目的小问题。

我的data-config.xml文件是这样的:

<dataConfig>
<dataSource name="db_ds" type="JdbcDataSource"
driver="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@KOR308051.bmh.apac.bosch.com:1521:xe"
user="ezbdb"
password="ezbdb"/>

<dataSource name="tk_ds" type="BinFileDataSource" />

 <script>  
    <![CDATA[ 

    function getFilePath(row) { 
        var link = row.get('url_link');
        if (link === null || true === link.isEmpty() || link === '') {
                            row.remove('url_link');
                    } else {
            var path_arr = link.split("#");
            var file_path = path_arr[0];            
            row.put(file_path);
        }
         return row;
     }  
    ]]>  
</script>

<document name="db_doc">
    <entity name="db_link"
            query="SELECT 
                    d.doc_url as Link,
                    d.doc_name as Name,
                    cast(trunc(d.last_modified) as date) as Last_modified
                    FROM doc_data d
            dataSource="db_ds" transformer="DateFormatTransformer,script:getFilePath">
                    <field column="LINK" name="link"/>
        <field column="NAME" name="name"/>
        <field column="LAST_MODIFIED" name="last_modified" xpath="/RDF/item/date" dateTimeFormat="yyyy-MM-dd HH:mm:ss"/>

            <entity name="tika-doc" dataSource="tk_ds" processor="TikaEntityProcessor"
                          url="${db_link.LINK}" format="text" onError="skip">
                         <field column="text" name="content"/>
           </entity>

           </entity>
</document>
</dataConfig>

问题是,文件路径以不同的模式存储在数据库中: “doc_url”是db中存储url或文件路径的字段。文件路径以这种方式存储:               d:\游戏\ CS2 \ setup.doc#d:\游戏\ CS2 \ setup.doc#的 即,路径被存储两次由'#'分隔。我不确定为什么要这样做。它已由我们的客户完成。

我只需要一个文件路径,即D:\ Games \ CS2 \ setup.doc 我将网址值传递给tika为 url="${db_link.LINK}" ${db_link.LINK} 包含直接来自数据库的路径。 我已经尝试使用脚本转换器并使用'#'将路径字符串拆分为部分,并使用 getFilePath(row) 方法获取第一个路径,但没有运气。

我仍在获取存储在db中的路径。这在尝试索引时会出现 FileNotFound 异常,这很明显,因为路径不正确。

可以做些什么才能获得路径,而忽略了路径的剩余部分#和所有?

非常感谢帮助:)

1 个答案:

答案 0 :(得分:1)

您可以使用SolR的RegexTransformer:

http://wiki.apache.org/solr/DataImportHandler#RegexTransformer

  • 将您的变换器属性添加到R​​egexTransformer:
    <entity name="db_link"
                    query="SELECT ..." ... transformer="... ,org.apache.solr.handler.dataimport.RegexTransformer"...>
  • 修改行中的字段标记&#39;链接&#39; :
<field column="link" regex="^([^#]+)#" sourceColName="LINK"/>

那应该是全部

编辑正则表达式已更正