在hibernate中使用已有的analyzer搜索AnalyzerDiscriminator
Use existing analyzer in hibernate search AnalyzerDiscriminator
@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
之类的现有分析器以及我动态定义的 en
和 de
分析器?我只能在这里 return 分析器的名称,当我 return CJKAnalyzer
我得到未定义的分析器。
如何将现有的分析器添加到我的分析器定义中?
这是一个很好的问题,我很惊讶之前没有人问过这个问题。
答案是不可能。
我已针对该项目提出功能请求以对此进行改进:
@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
之类的现有分析器以及我动态定义的 en
和 de
分析器?我只能在这里 return 分析器的名称,当我 return CJKAnalyzer
我得到未定义的分析器。
如何将现有的分析器添加到我的分析器定义中?
这是一个很好的问题,我很惊讶之前没有人问过这个问题。
答案是不可能。
我已针对该项目提出功能请求以对此进行改进: