【问题标题】:Is there a Lucene Analyzer that removes all the non letters and converts all uppercase to lowercase?是否有一个 Lucene Analyzer 可以删除所有非字母并将所有大写字母转换为小写字母?
【发布时间】:2013-09-17 14:49:37
【问题描述】:

我正在使用 Lucene 4.4,我有一个项目要做。在该项目中,必须删除所有非字母,并且必须将所有大写字母转换为小写字母。 我知道有一个分析器可以去除非字母。

但是 Lucene 中是否有一个分析器可以同时删除所有非字母并将所有大写字母转换为小写字母?

干杯。

【问题讨论】:

    标签: java lucene indexing information-retrieval analyzer


    【解决方案1】:

    实际上,是的,有一个分析器可以做到这一点。 SimpleAnalyzer。


    以下内容(几乎)完全相同:

    Analyzer analyzer = new Analyzer() {
     @Override
      protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
        Tokenizer source = new LetterTokenizer(Version.LUCENE_44, reader);
        TokenStream filter = new LowercaseFilter(Version.LUCENE_44, source);
        return new TokenStreamComponents(source, filter);
      }
    };
    

    当您对分析器有非常具体的要求时,您通常需要通过链接 Tokenizer 和一些类似这样的过滤器来设计自己的,如 Analyzer documentation 所示 LetterTokenizer 将标记定义为相邻字母的最大字​​符串,LowercaseFilter 执行它在锡上所说的操作。

    这是一种相当常见的组合,因此还有LowercaseTokenizer,它可以一步完成LowercaseFilter 和LetterTokenizer 的工作,从而提供性能优势。 LowercaseTokenizer 是SimpleAnalyzer 实际使用的内容

    【讨论】:

    • 我只是好奇。你为什么对你提供的分析仪说“几乎完全一样”?
    • @yns 原因在最后一段。结果完全一样,但是SimpleAnalyzer实际上并没有链接LetterTokenizer和LowercaseFilter,而只是使用了LowercaseTokenizer,它的性能要好一些。
    猜你喜欢
    • 2017-08-26
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    相关资源
    最近更新 更多