我只是写了一个自定义CharTokenizer,我想在我的Solr服务器中使用它。

在Solr3中,我可以扩展TokenizerFactory并在create方法中返回我的CharTokenizer,但是TokenizerFactory在Solr4中不存在。

因此,我注意到应该将TokenizerFactory替换为TokenFilterFactory,但是在这种情况下,由于参数不匹配,因此无法返回我的自定义CharTokenizer

我也搜索一些文档,但是看起来那里并没有什么真正有用的。

那么,如何使它起作用?

例:

public class MyCustomTokenizer extends CharTokenizer {

  char anotherSpace = 24;

  public MyCustomTokenizer(Version matchVersion, Reader in) {
    super(matchVersion, in);
  }

  protected boolean isTokenChar(int c) {
    return !Character.isWhitespace(c) && isToken((char) c);
  }

  private boolean isToken(char c) {
    if (c == anotherSpace || c == ',') {
        return false;
    }
    return true;
  }
}

public class MyCustomTokenizerFactory extends TokenFilterFactory {

  public void init(Map<String, String> args) {
    super.init(args);
    assureMatchVersion();
  }

  @Override
  public TokenStream create(TokenStream input) {
      // sh*t happens here
    return new MyCustomTokenizer(luceneMatchVersion, input);
  }
}


提前致谢。

最佳答案

检查实现的最佳方法是查看Lucene中现有Tokenizer的源代码。

例子:-

WhitespaceTokenizer
WhitespaceTokenizerFactory

关于java - 在Solr4中应用自定义CharTokenizer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13183729/

10-09 05:17