【问题标题】:Apache Solr performance issue for multiple token filters at index and query time索引和查询时多个令牌过滤器的 Apache Solr 性能问题
【发布时间】:2018-03-01 06:21:46
【问题描述】:

我必须在 Apache Solr 6.6.2 中将数字从一种语言转换为另一种语言。为此,我发现模式替换过滤器可以完成这项工作。我在 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】:

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

我不认为使用 patternreplacementfilter 来做你想做的事情是一种更简单的方法,因为你正在寻找每个数字的特定替换。

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

【讨论】:

  • 感谢兄弟的关心
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多