我使用solr索引知识库。问题是,菜单也被编入索引,因此搜索菜单中使用的术语将返回所有页面 我能以某种方式告诉solr从索引中排除一个特殊的html类吗? HTML标签已删除,因此我无法在以后找到指定的元素。
修改
我为我想要实现的目标添加了一个简短的样本
也就是说,要将某些html节点(例如我的导航)排除在索引之外。
示例html:
<nav>
<ul>
<li>topic-1</li>
<li>topic-2</li>
<li>topic-3</li>
</ul>
</nav>
<main>
<h1>Topic-1</h1>
<p>Lorem ipsum dolor sit ament...</p>
</main>
我目前从索引中获得的内容:
topic-1
topic-2
topic-3
Topic-1
lorem ipsum dolor sit ament...
我想在我的索引中得到什么:
Topic-1
lorem ipsum dolor sit ament...
答案 0 :(得分:1)
你基本上想删除一些文字。您可以使用PatternReplace Character Filter在字段本身上执行此操作,该字段位于字段类型定义中的Tokenizer之前。这将保留在该字段的存储版本中。
或者,您可以在索引过程中更早地使用,并使用UpdateRequestProcessor在甚至查看索引之前修改该字段。你需要RegexReplace URP。
答案 1 :(得分:0)
使用HTMLStripCharFilterFactory,它将删除HTML标记:
<analyzer>
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
让我知道它是否适用于你。
在这里您可以找到更多相关信息。
https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.HTMLStripCharFilterFactory
答案 2 :(得分:0)
使用XPathEntityProcessor提取文档的子集,并与提供的XPath模式匹配。
通过这种方式,您可以索引页面中所需的实际内容(只要它是有效的XML),并忽略其他常见内容,例如页眉/页脚/等。同样。