java - 用于子字符串搜索的 Lucene 分析器分词器

标签 java lucene tokenize analyzer

我需要一个可以执行以下操作的 Lucene Tokenizer。给定字符串“wines Bottle caps”,以下查询应该成功

  • 博特
  • 上限
  • 奥特尔
  • AP
  • 酒瓶

这是我到目前为止所拥有的。我该如何修改它才能工作?少于三个字符的查询不应起作用。

public class PorterAnalyzer extends Analyzer {

  private final Version version;

  public PorterAnalyzer(Version version) {
    this.version = version;
  }

  @Override
  @SuppressWarnings("resource")
  protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
    final StandardTokenizer src = new StandardTokenizer(reader);
    TokenStream tok = new StandardFilter(src);
    tok = new LowerCaseFilter( tok);
    tok = new StopFilter( tok, StandardAnalyzer.STOP_WORDS_SET);
    tok = new PorterStemFilter(tok);
    return new TokenStreamComponents(src, tok);
  }

}

最佳答案

我认为您正在搜索NGramTokenFilter

尝试,例如:

tok=new NGramTokenFilter(tok,2,5);

关于java - 用于子字符串搜索的 Lucene 分析器分词器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30578058/

相关文章:

c - 引用指向字符数组的指针,一个 strtok 工作示例

java - 为什么在 applicationContext.xml 中不接受 tomcat 的 -D 参数?

java - Spring Integration DSL - 可访问 header 的出站网关

java - arraylist = arraylist 和 arraylist.addAll(arraylist) 之间的区别

java - Solr:当用多个词查询字段时,默认的 OR 运算符返回不相关的结果

java - 如何在java中扫描文本时删除空格

c++ - Boost::tokenizer 逗号分隔 (c++)

java - 字节 -> 原始不一致,尝试创建缓冲区

apache - 如何使用 Apache Lucene 5.3.1 仅索引最小长度的单词?

elasticsearch - 当我使用 completion suggester 时,如何获得没有重复的独特建议?