在 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.1
和 solr-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 的方法来进行解析,但我看不到任何公开的配置会改变您的体验。
我只需要索引来自 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.1
和 solr-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 的方法来进行解析,但我看不到任何公开的配置会改变您的体验。