【问题标题】:How to generate compound tokens in lucene 6 based on whitespace?如何在 lucene 6 中基于空格生成复合标记?
【发布时间】:2016-10-18 12:55:37
【问题描述】:

我有一个这样的 lucene 条目:

“增加心率”

当我遇到“增加的心率”文本时,我想在索引中匹配此条目。这意味着我需要将输入标记为:

{increased, heart, rate}
{increasedheart, rate}
{increased, heartrate}

如何用 lucene 6+ 做到这一点?

亲切的问候

【问题讨论】:

    标签: java indexing lucene tokenize


    【解决方案1】:

    这是我的做法,欢迎提出建议:

      public class MyAnalyzer extends Analyzer {
    
    
      public MyAnalyzer() {
        super();
      }
    
      @Override
      protected TokenStreamComponents createComponents(String fieldName) {
    
        final Tokenizer src = new WhitespaceTokenizer();
        TokenStream tok = new LowerCaseFilter(src);
        tok = new HyphenatedWordsFilter(tok);
        tok = getStopFilter(tok);
        ShingleFilter filter = new ShingleFilter(tok, 2);
        filter.setTokenSeparator("");
        tok = filter;
    
        return new TokenStreamComponents(src, tok) {
          @Override
          protected void setReader(final Reader reader) {
            super.setReader(reader);
          }
        };
      }
    
    }
    

    注意ShingleFilter,以及使用token separator设置方法。

    【讨论】:

      猜你喜欢
      • 2012-02-09
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多