在休眠搜索AnalyzerDiscriminator中使用现有的分析器

时间:2016-12-02 09:18:31

标签: java hibernate search lucene hibernate-search

@Entity
@Indexed
@AnalyzerDefs({
  @AnalyzerDef(name = "en",
    tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
    filters = {
      @TokenFilterDef(factory = LowerCaseFilterFactory.class),
      @TokenFilterDef(factory = EnglishPorterFilterFactory.class
      )
    }),
  @AnalyzerDef(name = "de",
    tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
    filters = {
      @TokenFilterDef(factory = LowerCaseFilterFactory.class),
      @TokenFilterDef(factory = GermanStemFilterFactory.class)
    })
})
public class BlogEntry {

    @Id
    @GeneratedValue
    @DocumentId
    private Integer id;

    @Field
    @AnalyzerDiscriminator(impl = LanguageDiscriminator.class)
    private String language;

    @Field
    private String text;

    private Set<BlogEntry> references;

    // standard getter/setter
    // ...
}

public class LanguageDiscriminator implements Discriminator {

    public String getAnalyzerDefinitionName(Object value, Object entity, String field) {
        if ( value == null || !( entity instanceof Article ) ) {
            return null;
        }
        return (String) value;

    }
}

来自Reference Doc
如何使用现有的分析工具,例如org.apache.lucene.analysis.cjk.CJKAnalyzer以及我动态定义的ende分析器?我只能在这里返回分析器的名称,当我返回CJKAnalyzer时,我没有定义分析器。

如何将现有分析仪添加到我的分析仪定义中?

1 个答案:

答案 0 :(得分:0)

这是一个很好的问题,我很惊讶之前没有人问过这个问题。

答案是,这是不可能的。

我已经在项目上打开了一项功能请求,以改进: