索引和查询时多个令牌过滤器的Apache Solr性能问题

问题描述 投票:0回答:1

我必须在Apache Solr 6.6.2中将Number号从一种语言转换为另一种语言。为此,我发现模式替换过滤器可以完成这项工作。我在Solr架构中添加了一个带有以下过滤器的新字段

<fieldType name="text_use" class="solr.TextField">
    <analyzer type="index">
      <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>

    <filter class="solr.PatternReplaceFilterFactory" pattern="0" replacement="۰"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="1" replacement="۱"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="2" replacement="۲"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="3" replacement="۳"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="4" replacement="۴"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="5" replacement="۵"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="6" replacement="۶"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="7" replacement="۷"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="8" replacement="۸"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="9" replacement="۹"/>
    </analyzer>

    <analyzer type="query">
      <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
    <filter class="solr.SynonymGraphFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
    <filter class="solr.LowerCaseFilterFactory"/>

    <filter class="solr.PatternReplaceFilterFactory" pattern="0" replacement="۰"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="1" replacement="۱"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="2" replacement="۲"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="3" replacement="۳"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="4" replacement="۴"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="5" replacement="۵"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="6" replacement="۶"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="7" replacement="۷"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="8" replacement="۸"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="9" replacement="۹"/>
    </analyzer>
</fieldType>

在查询和索引时应用大量过滤器是好的吗?由于过滤器数量多,系统中是否存在任何性能问题?最后,是否可以使用正则表达式模式编写一个过滤器?如果是,那会是什么?

java regex solr lucene tokenize
1个回答
0
投票

性能 - 无论有没有尝试。由于索引通常在没有非常严格的性能要求的情况下完成,因此如果额外花费几毫秒,通常不是一个非常大的问题。对于查询,它只是正在处理的查询文本,并且远远少于文档本身的内容。

我不认为使用patternreplacementfilter可以更轻松地完成您想要的操作,因为您正在寻找每个数字的特定替换。

编写自己的过滤器可能是最简单的方法 - 一个urdu数字转换过滤器,它可能对更多人也有用(所以将它上传到github repo)。在单独的过滤器中,您可以一次性执行所有替换,并且您可以在没有正则表达式支持的情况下执行此操作(尽管性能差异可能不大,但它应该至少比调用正则表达式引擎十次更快 - 但同样,自己测试一下)。

© www.soinside.com 2019 - 2024. All rights reserved.