Индексирование HTML в Solr DataImportHandler

В настоящее время я использую JdbcDataSource для импорта документа из серверной части SqlServer. Некоторые поля содержат необработанный HTML-код. Я хочу удалить HTML перед индексированием. Проблема в том, что что-то кодирует открывающий символ '‹' при индексировании. В конечном итоге я хотел бы использовать HTMLStripTransformer, чтобы вырезать весь HTML из поля JobDescription, однако он ничего не удаляет, потому что наполовину закодированный контент для него не похож на html.

данные-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> 
...

In the DB the JobDescription column has the following:

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

person cfbarbero    schedule 10.10.2012    source источник


Ответы (2)


Похоже, что HtmlStripFormatter не обрабатывает ваши данные, когда он импортируется, и у вас не должно быть никакой разметки html в вашем индексированном поле. Я проверил документацию для DataImportHandler и заметил следующее:

Примечание. Значение преобразователя должно быть полностью определенным именем класса. Если пакет класса - org.apache.solr.handler.dataimport, имя пакета можно не указывать. Solr. также работает, если класс принадлежит одному из пакетов '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 к своему fieldType в поле JobDescription. и пусть индекс удалит HTML, когда он анализирует поле.

person Paige Cook    schedule 11.10.2012
comment
Насколько я могу судить, HtmlStripCharFilterFactory удаляет HTML только из индексированного поля, а не из сохраненного поля. Это верно? Если так, это не сработает, поскольку мы отображаем сохраненное поле. Я посмотрю на полную квалификацию имени. - person cfbarbero; 11.10.2012

Хорошо, похоже, что полукодированные результаты, которые я наблюдал, были всего лишь выходом из консоли «отладки». Консоль отладки DIH должна частично кодировать HTML, чтобы он был доступен для просмотра и не отображался. Кроме того, похоже, что HTMLStripTransformer работает так, как рекламируется. Проблема, с которой я столкнулся, заключается в том, что он не очень терпим к плохому HTML, вроде того, что выплевывает MS Word. После переиндексации с включенным HtmlStripTransformer все еще оставалось несколько записей с HTML, но, похоже, в них просто был плохой HTML (т. Е. Атрибуты, значения которых не были заключены в одинарные кавычки и т. Д.).

person cfbarbero    schedule 11.10.2012