This is because there is a RichTextFieldReader assigned to the html and rich text fields:
<fieldReader fieldTypeName="html|rich text" fieldNameFormat="{0}" fieldReaderType="Sitecore.ContentSearch.FieldReaders.RichTextFieldReader, Sitecore.ContentSearch" />
In Sitecore 8.1, it is defined in Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config .
It removes all tags using HtmlField.GetPlainText() .
You can try adding another section at the same level as <mapFieldByTypeName hint="raw:AddFieldReaderByFieldTypeName"> , and use something like:
<mapFieldByFieldName hint="AddFieldReaderByFieldName"> <fieldReader fieldName="yourFieldName" fieldReaderType="Sitecore.ContentSearch.FieldReaders.DefaultFieldReader, Sitecore.ContentSearch" />
Mapping with fieldName takes precedence over matching by field type, so it will use the fieldRendered specified for your field, instead of using the one specified for your field type.
source share