0

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

数据配置.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> 
...

在数据库中,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">
4

2 回答 2

0

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

注意——转换器的值必须是完全限定的类名。如果类包是“org.apache.solr.handler.dataimport”,包名可以省略。索尔。如果该类属于“solr”包之一,也可以使用。此规则适用于所有可插入类,如 DataSource 、 EntityProcessor 和 Evaluator。

基于此,您需要完全限定您的转换器属性中的条目,因为 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。

于 2012-10-11T00:46:22.467 回答
0

好的,看起来我观察到的半编码结果只是“调试”控制台的输出。DIH 调试控制台必须对 HTML 进行部分编码,以使其可见且不呈现。此外,HTMLStripTransformer 似乎像宣传的那样工作。我遇到的问题是它不能很好地容忍糟糕的 HTML,比如 MS Word 吐出的那种。在启用 HtmlStripTransformer 重新索引后,仍然有一些带有 HTML 的记录,但似乎那些只是有错误的 HTML(即,其值未用单引号括起来的属性等)。

于 2012-10-11T14:58:53.477 回答