在Solr DataImportHandler中索引HTML

时间:2012-10-10 22:55:31

标签: solr dataimporthandler

我目前正在使用JdbcDataSource从SqlServer后端导入文档。一些字段中包含原始HTML。我想在索引之前删除HTML。问题在于某些东西正在编码开头'<'索引时的char。最后,我想使用HTMLStripTransformer来删除JobDescription字段中的所有HTML,但是,它并没有删除任何内容,因为半编码内容看起来不像html。< / p>

数据-config.xml中

<dataConfig>
<dataSource type="JdbcDataSource"
            driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
            url="jdbc:sqlserver://SERVERNAME;databaseName=DBNAME;integratedSecurity=true;"
            applicationName="RHW_Jobs SOLR Data Import Handler"/>
<document>
    <entity name="job" query="SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
        SELECT [JobID],[JobDescription] FROM [JobSeeker].[Solr].[Jobs]"
    transformer="HTMLStripTransformer,RegexTransformer,DateFormatTransformer">
        <field column="JobID" name="JobID" />
        <field column="JobDescription" name="JobDescription" stripHTML="true" />
    </entity>
</document>

从调试窗口输出

<lst>
<arr name="JobID">
<str>373E383A-AD6C-4858-B5FB-C724486B186A</str>
</arr>
<arr name="JobDescription">
<str>&lt;td class="form">  &lt;ul>    &lt;li>      &lt;p>        &lt;span style="FONT-FAMILY: Georgia; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">&lt;strong>&lt;u> 
...

在DB中,JobDescription列具有以下内容:

<td class="form">  <ul>    <li>      <p>        <span style="FONT-FAMILY: Georgia; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">

2 个答案:

答案 0 :(得分:0)

看起来HtmlStripFormatter在导入数据时没有处理您的数据,因此您的索引字段中不应该有任何html标记。我查看了DataImportHandler的文档,并注意到以下内容:

  

注 - 变换器值必须是完全限定的类名。如果类包是'org.apache.solr.handler.dataimport',则可以省略包名。 solr。如果类属于'solr'包之一,也可以工作。此规则适用于所有可插入类,如DataSource,EntityProcessor和Evaluator。

基于此,您需要完全限定tranformer属性中的条目,因为HTMLStripFormatter来自 org.apache.solr.analysis 类。因此,您需要修改如下:

 <entity name="job" query="SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    SELECT [JobID],[JobDescription] FROM [JobSeeker].[Solr].[Jobs]"
transformer="org.apache.solr.analysis.HTMLStripTransformer,RegexTransformer,DateFormatTransformer">

或者,您可以将HtmlStripCharFilterFactory应用于索引中JobDescription字段的fieldType,并让索引在分析字段时删除Html。

答案 1 :(得分:0)

好吧,看起来我正在观察的半编码结果只是'debug'控制台的输出。 DIH调试控制台必须对HTML进行部分编码,以使其可见且不呈现。此外,似乎HTMLStripTransformer的工作方式与宣传的一样。我遇到的问题是,它不能容忍错误的HTML,例如MS Word吐出的错误。在启用了HtmlStripTransformer的重建索引之后,仍然有一些带有HTML的记录,但看起来那些只有坏的HTML(即属性的值没有用单引号括起来等)。