在 solr 中仅索引来自 HTML 的纯文本

Index only plain text from HTML in solr

我只需要索引来自 HTML 的纯文本并拒绝所有其他 HTML 标签。

例如:我html喜欢

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>
       title
    </title>
    <link href="./test.html" rel="StyleSheet" type="text/css" />
    </head>
    <body>
      <h1 style="height: 22px">
       header
      </h1>
    </body>
</html>

我只想索引正文标签下的 'header' 文本,并拒绝 solr 的 _text_ 字段中的所有其他 HTML 标签。

我试过 <charFilter class="solr.HTMLStripCharFilterFactory"/> 如下:

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
  <analyzer type="index">
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <charFilter class="solr.HTMLStripCharFilterFactory"/>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

但它仍在索引 HTML 标签属性

根据 solr 文档,它不应索引 HTML 标签 solr.HTMLStripCharFilterFactory

当我搜索 solr/testcore/select?q=_text_:height&wt=json 时,它给了我一条不应该的记录。

我在 solr-5.3.1solr-6.6.0 都试过了。

我卡住了,请帮帮我。

由于您将 HTML 原始文件发布到 Solr,它由 the extracting request handler ("Solr Cell") 处理 - 它使用 Apache Tika 从 HTML 文件中提取内容。

这意味着 _text_ 字段根本看不到 HTML 标签,因为内容 已经 被 Apache Tika 和 HTML 标签已消失 - 因此无需删除任何内容。

如果您使用所选编程语言的 Solr 客户端并直接将 HTML 作为字段值提交,HTML 剥离将如您所愿发生(因为标签是然后其实部分内容提交到Solr内部的字段类型)。

我尝试找到一些 configuring the HTML Parser in the bundled Tika version - it uses the Tagsoup library 的方法来进行解析,但我看不到任何公开的配置会改变您的体验。