【问题标题】:Exclude Replacement character from solr search result从 solr 搜索结果中排除替换字符
【发布时间】:2018-03-09 13:24:38
【问题描述】:

在运行 dspace filter-media 后在我的 dspace 服务器中搜索时,我看到了很多替换字符。我怎样才能忽略它们,或者说用空字符串替换它们?

我的第一个想法是做以下事情:

    <fieldType name="title" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="solr.KeywordTokenizerFactory"/>
            <filter class="solr.PatternReplaceFilterFactory" pattern="�" replacement=""/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.KeywordTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
        </analyzer>
    </fieldType>

但这仍然会在搜索结果中显示替换字符“�”。

【问题讨论】:

  • 它会在您索引时过滤(而不是在搜索/查询时 - 这将在 query 分析器中),因此您必须重新索引才能正确替换它。

标签: solr full-text-search dspace


【解决方案1】:

您发布的分析器仅在索引时进行替换工作,这意味着对于每个被索引的文档,对于与该类型关联的每个字段,都会发生替换。

如果你的意思是你仍然看到一些来自 Solr 的记录,这些字符可能意味着链不起作用(例如,过滤器中的正则表达式没有捕获/替换正确的字符)

我对你的问题有些怀疑,因为最后你说:

但我意识到这是用来过滤搜索查询的,而我需要过滤掉结果。

  • 替换过滤器在索引时使用,不是查询时
  • 分析器(索引或查询)不应该过滤我们的结果,这不是它的作用。分析器处理(索引时间)将被索引的文档,以及(查询时间)传入的查询字符串。

“过滤掉结果”是在查询时使用过滤器完成的。如果(试图解释您的疑问)您希望将那些包含这些字符的文档从索引阶段排除,那么您可以

  • 在客户端工作(避免将它们发送到 Solr)
  • 编写一个 UpdateRequestProcessor 来进行这种过滤

【讨论】:

  • 我只是不想在搜索结果中看到“�”,但我不知道该怎么做。
  • 那么我回答的第二部分就是你需要的(UpdateRequestProcessor)。它是一个组件,允许您在文档被索引之前对其进行操作。在那里你可以做任何你想做的事情,包括删除字符
  • 感谢您的回答。我应该使用哪个类? “IgnoreFieldUpdateProcessorFactory”是我能找到的最接近的,与描述相符。
  • 不,我想没有任何东西可以满足您的需要。如果我得到你,你根本不希望文档被索引
  • 我想从搜索结果中删除替换字符,所以我想应该在索引之前完成。知道我该怎么做吗?再次非常感谢您的耐心等待。
猜你喜欢
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多