【问题标题】:solr exclude html class from indexingsolr 从索引中排除 html 类
【发布时间】:2015-11-25 09:13:27
【问题描述】:

我正在用 solr 索引一个知识库。问题是,菜单也被索引,因此搜索菜单中使用的术语会返回所有页面。
我可以以某种方式告诉 solr 从索引中排除一个特殊的 html 类吗?
HTML-Tags 被删除,所以我以后找不到指定的元素。


编辑:
我为我想要实现的目标添加了一个简短的示例。
也就是说,将某些 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...

【问题讨论】:

    标签: html indexing solr


    【解决方案1】:

    使用 HTMLStripCharFilterFactory,它将去除 HTML 标签:

    <analyzer>
      <charFilter class="solr.HTMLStripCharFilterFactory"/>
      <tokenizer class="solr.StandardTokenizerFactory"/>
    </analyzer>
    

    让我知道它是否适合你。

    在这里您可以找到更多相关信息。

    https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.HTMLStripCharFilterFactory

    【讨论】:

    • 这不是我真正想要实现的,我在我的问题中添加了一个示例。
    • 尝试将 添加到您的字段类型并尝试...在此处添加正确的模式..
    • 我只有一个存放整个文档的内容字段
    【解决方案2】:

    使用XPathEntityProcessor 提取与提供的 XPath 模式匹配的文档子集。

    这样您就可以索引页面中所需的实际内容(只要它是有效的 XML),而忽略其他常见内容,例如页眉/页脚/等。也是。

    【讨论】:

      【解决方案3】:

      您基本上想删除一些文本。您可以使用 PatternReplace Character Filter 在字段本身上执行此操作,它位于字段类型定义中的 Tokenizer 之前。不过,这会将其保留在该字段的存储版本中。

      或者,您可以在索引过程中更早地进行,并使用 UpdateRequestProcessor 来修改字段,甚至在查看它以进行索引之前。你会想要RegexReplace URP

      【讨论】:

      • 还有一个问题,处理器代码应该放在我的 schema.xml 中,不是吗?因为示例空白模式对我不起作用
      • URP 被定义为 solrconfig.xml 中链的一部分,并且必须在请求处理程序上注册。检查你的 solrconfig.xml,它会有几个链的例子并注册它们。
      猜你喜欢
      • 2011-02-13
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      相关资源
      最近更新 更多