【问题标题】:Solr Strip html when highlighting with stored html fields使用存储的 html 字段突出显示时 Solr Strip html
【发布时间】:2016-05-20 19:02:10
【问题描述】:

在 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@@@、体育、本地优惠和所有最新对话的社区联系。

\n

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


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我会在进去的路上把它们去掉。
【解决方案2】:

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

根据Solr documentation&lt;charFilter&gt; 标签必须在&lt;tokenizer&gt; 标签之前

所以我认为你应该有这样的东西:

<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>

【讨论】:

    猜你喜欢
    • 2011-11-18
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2013-08-30
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多