在轨道中使用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中的内容。
谢谢
答案 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>