Поисковый сервер Solr: Как убрать HTML-сущности из контента для индексации - PullRequest
1 голос
/ 07 февраля 2012

Я новичок в Solr и у меня нет навыков в Java, поэтому, возможно, я что-то упускаю ... Я пытаюсь заставить Solr убрать HTML из содержимого, используя следующий CharFilter:

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.HTMLStripCharFilterFactory

Вот как я включаю его в свой schema.xml:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
  </analyzer>
  <analyzer type="query">
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
  </analyzer>
</fieldType>

<fields>
  <field name="text" type="text" indexed="true" stored="true" multiValued="false" />
</fields>

Если я запрашиваю анализатор d'Hèrcules с помощью анализатора на панели администратора Solr, я получаю совпадение (см. поле):

<doc>
<long name="comment_count">0</long>
<str name="ct_model_name">theatre</str>
<str name="django_ct">timeout.work</str>
<str name="django_id">2535</str>
<bool name="family">false</bool>
<long name="hits">0</long>
<str name="id">timeout.work.2535</str>
<str name="name">Les aventures d'Hèrcules</str>
<arr name="parent_sections">
<str>Escena</str>
</arr>
<long name="rating">0</long>
<bool name="recommended">false</bool>
<arr name="sections">
<str>Escena - Infantil</str>
</arr>
<str name="text">
Les aventures d&#39;Hèrcules Jordi Andújar &lt;p&gt;Prepareu-vos per viatjar a l’antiga Grècia on coneixereu l’heroi més gran de tots els temps: l’Hèrcules. De viatge cap a l’Olimp, l’heroi viurà les més increïbles aventures, lluitarà amb bèsties ferotges i perillosos monstres, i s’enfrontarà a la maldat de la temible deessa Hera. Per a tota la família&lt;/p&gt;
</str>
...
</doc>

но мне нужно сопоставить, выполнив поиск в форме не-HTML-сущности: например, в этом случае будет "l'Hèrcules" (обратите внимание на одинарную кавычку).

Что я делаю не так?

Кстати, я использую django-haystack, если эта информация полезна каким-либо образом.

Заранее спасибо,

Гектор

1 Ответ

7 голосов
/ 07 февраля 2012

У вас хорошо получается на стороне Solr, единственное, что вы должны заметить, это то, что есть разница между тем, что Solr хранит, и тем, что индексирует Solr.Solr сохраняет данные без изменений, а через цепочку анализатора вы можете изменить способ индексации данных Solr.Таким образом, вы на самом деле говорите Solr убрать любой html-тег из индекса и заменить html-сущности связанными символами, но Solr всегда будет возвращать их по мере их отправки.

Вы можете искать d'Hèrcules или d&#39;Hèrcules и у вас должны быть одинаковые результаты, поскольку вы запускаете HtmlStripCharFilterFactory даже во время запроса, поэтому вы в основном отправляете один и тот же запрос для d'Hèrcules в обоих случаях, поскольку &#39; преобразуется в '.

Ваш поиск по l'Hèrcules заставляет меня думать, что неэкранированный символ между l и Hercules в вашем документе - это не ', а что-то, что выглядит действительно похожим.Я думаю, тебе стоит это проверить.

...