Индексировать только простой текст из HTML в Solr - PullRequest
0 голосов
/ 30 октября 2018

Мне нужно проиндексировать только простой текст из HTML и отклонить все остальные теги HTML.

Например: у меня есть HTML как

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>
       title
    </title>
    <link href="./test.html" rel="StyleSheet" type="text/css" />
    </head>
    <body>
      <h1 style="height: 22px">
       header
      </h1>
    </body>
</html>

Я хочу проиндексировать только текст заголовка под тегом body и отклонить все остальные теги HTML в поле _text_ solr.

Я пытался <charFilter class="solr.HTMLStripCharFilterFactory"/>, как показано ниже:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
  <analyzer type="index">
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

Но он по-прежнему индексирует атрибуты тегов HTML

Согласно документации solr не следует индексировать теги HTML solr.HTMLStripCharFilterFactory

Когда я ищу solr/testcore/select?q=_text_:height&wt=json, это дает мне запись, которая не должна быть.

Я пробовал в solr-5.3.1 и solr-6.6.0.

Я застрял с этим, пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 30 октября 2018

Поскольку вы публикуете исходный HTML-код в Solr, он обрабатывается обработчиком запросов извлечения ("Solr Cell") - который использует Apache Tika для извлечения содержимого из файла HTML.

Это означает, что поле _text_ вообще не видит теги HTML, так как содержимое уже было извлечено Apache Tika, а теги HTML исчезли, поэтому удалить нечего.

Если вы используете клиент Solr на выбранном языке программирования и отправляете HTML как значение поля напрямую, разбор HTML будет выполняться так, как вы ожидаете (поскольку теги фактически являются частью контента, передаваемого в поле). вводит внутренне в Solr).

Я попытался найти какой-то способ для настройки HTML Parser в комплекте версии Tika - он использует библиотеку Tagsoup для анализа, но я не вижу никакой открытой конфигурации, которая изменит то, что вы испытываете.

...