0

現在、JdbcDataSourceを使用してSQLServerバックエンドからドキュメントをインポートしています。一部のフィールドには、生のHTMLが含まれています。インデックスを作成する前にHTMLを削除したいと思います。問題は、インデックス作成時に何かが開始'<'文字をエンコードしていることです。最終的には、HTMLStripTransformerを使用してJobDescriptionフィールドからすべてのHTMLを削除したいのですが、半分エンコードされたコンテンツはHTMLのように見えないため、何も削除されません。

data-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">
4

2 に答える 2

0

わかりました。私が観察したセミエンコードされた結果は、「デバッグ」コンソールからの出力にすぎなかったようです。DIHデバッグコンソールは、HTMLを部分的にエンコードして、表示可能でレンダリングされないようにする必要があります。さらに、HTMLStripTransformerはアドバタイズされたとおりに機能しているようです。私が遭遇した問題は、MSWordによって吐き出されるような悪いHTMLに対してあまり寛容ではないということです。HtmlStripTransformerを有効にしてインデックスを再作成した後も、HTMLを含むレコードがいくつかありましたが、HTMLが不良であるようです(つまり、値が一重引用符で囲まれていない属性など)。

于 2012-10-11T14:58:53.477 に答える
0

HtmlStripFormatter は、データがインポートされているときにデータを処理していないようです。インデックス付きフィールドに html マークアップを含めることはできません。DataImportHandlerのドキュメントを確認したところ、次のように記載されていることに気付きました。

注 - トランスフォーマーの値は、完全に修飾された classname である必要があります。クラス パッケージが「org.apache.solr.handler.dataimport」の場合、パッケージ名は省略できます。ソル。クラスが「solr」パッケージのいずれかに属している場合にも機能します。このルールは、 DataSource 、 EntityProcessor 、 Evaluator などのすべてのプラグ可能なクラスに適用されます。

HTMLStripFormatter はorg.apache.solr.analysisクラスに由来するため、これに基づいて、tranformer 属性のエントリを完全に修飾する必要があります。したがって、次のように変更する必要があります。

 <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 に答える