2015-02-04 2 views
3

У меня есть поле тела, которое может содержать html-текст из богатого текстового редактора. Я хочу иметь возможность возвращать от него выделенные фрагменты, но с удаленным html.Как выделить термин запроса в поле, содержащем html в Solr

Возьмите текст ниже индексируется:

<p class="something">some text here with words and other text</p>

Если вы ищете «словами», вы можете получить следующие выделения фрагмента (в зависимости от длины фрагмента и т.д.):

class="something">some text here with <em>words</em> and other text</p> или class="something">some text here with <em>words</em> and other text

Где HTML разделен, что вызовет проблемы с обработкой на интерфейсе. Я хочу вычеркнуть html до того, как будет применена подсветка. Я пробовал разные компоненты выделения, но не видел никаких свойств, которые делают трюк.

Нужно ли убирать HTML перед индексированием? Или есть еще одна техника для этого?

В настоящее время я использую HTMLStripCharFilterFactory, чтобы вырезать HTML во время индекса, но компонент выделения, используя базовые хранимые данные, которые являются исходным html.

+0

Для тех, кто попадается с той же проблемой ... Я в конечном итоге зачистки HTML, прежде чем он приходит в Solr –

ответ

1

У меня также есть та же проблема, и пришли к выводу, что единственный способ заключается в использовании двух полей, например:

  1. content_html: оригинальный HTML, использует HtmlStripCharFilterFactory так просто содержание HTML будет индексироваться/лексемы
  2. content_stripped: содержание только текст, будет использоваться для выделенных фрагментов

в C# я бы использовать HtmlAgilityPack, например, чтобы загрузить HTML в документ затем вызвать .text на корневом узле.

Оба поля должны быть сохранены так, чтобы вы могли использовать текстовое поле для фрагментов и поле html для того, чтобы выделить все поле.

Я рассмотрел как Solr, так и ElasticSearch, и из того, что я нашел, нет встроенного способа, потому что выделение выполняется на все, что хранится.

Похожие: Solr Strip html when highlighting with stored html fields

Похожие: How to handle html tags in highlight fragment in SOLR

+0

Спасибо за добавление ответ - пометили его как таковой для тех, кто сталкивается с этим. –

+0

pholly и @IanRoutledge - можете ли вы подтвердить, что даже анализатор, который пользователи «char_filter»: ["html_strip"] 'wouldn ** not ** help здесь, потому что анализаторы влияют только на то, как контент анализируется (обозначается и т. Д.)) ** (и/или как запросы ** анализируются **); анализаторы ** не ** влияют на то, как это ** хранится **, а так как ** сохраненное ** значение имеет значение для фрагментов подсветки, анализаторы не могут исправить эту проблему с выделенными фрагментами? –

Смежные вопросы