2

在 Rails 中使用 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 文本。例如:对“新闻”的搜索返回:

"与@@@hl@@@news@@@endhl@@@、体育、本地交易和所有最新对话的社区联系。</div>\n</div>\n</div>"

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

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

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

谢谢

4

2 回答 2

3

您需要在插入 Solr 之前或从索引中检索之后手动剥离该数据/格式。Solr 中的分析器、标记器和标记过滤器针对该字段运行,并针对在将标记/术语插入该文档的索引之前或在查询处理期间传递的值执行它们的操作。但是,它将始终以传入的原始表单存储与查询结果一起返回的字段值。

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

于 2013-01-25T17:56:23.913 回答
1

对于我的项目,我还需要在索引之前去除 HTML 标签,我的谷歌搜索首先把我带到了这里。在对 Paige Cook 链接的文档进行了短暂访问后,我发现了您的问题schema.xml可能出在哪里。

根据Solr 文档<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>
于 2016-05-20T11:02:10.020 回答