使用存储的html字段突出显示Solr Strip html

时间:2013-01-25 17:41:42

标签: solr ruby-on-rails-3.1 sunspot-solr

在轨道中使用Solr和Sunspot。

我正在使用像这样的字段类型搜索html字段:

<fieldType name="text_html" class="solr.TextField" omitNorms="false">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

然后我执行搜索并使用存储的字段,以便我可以在结果中返回突出显示的文本。我遇到的问题是存储的值中包含原始的html文本。例如:搜索“新闻”正在返回:

“@@@@@@@@@@@@@@@@@@@@@ “

然后我想用html包装标签替换标签@@@ hl @@@,@@@ endhl @@@。

我是否需要手动删除原始的html标签(div等)标签,或者有​​没有办法让存储的值已经删除了html标签?

我知道如何手动执行此操作,只是想确保我没有遗漏schema.xml或solrconfig.xml中的内容。

谢谢

2 个答案:

答案 0 :(得分:3)

在插入Solr之前或从索引中检索之后,您需要手动删除该数据/格式。 Solr中的Analyzers, Tokenizers, and Token Filters针对该字段运行,并针对在将令牌/术语插入该文档的索引之前或在查询处理期间传递的值执行其操作。但是,它将始终存储字段值,以便以传入的原始格式返回查询结果。

如果您正好使用DataImportHandler将数据加载到Solr中,它会提供HtmlStripTransformer和/或RegExTransformer,您可以利用它来删除html标记。

答案 1 :(得分:1)

对于我的项目,我还需要在编制索引之前删除HTML标记,我的谷歌搜索首先将我带到这里。在短暂访问Paige Cook链接的文档后,我发现了schema.xml可能存在的问题。

根据Solr documentation<charFilter>标记必须在 <tokenizer>标记之前

所以我认为你应该有这样的事情:

<fieldType name="text_html" class="solr.TextField" omitNorms="false">
  <analyzer>
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StandardFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ISOLatin1AccentFilterFactory"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>