7.3.6. Analyzer
假设索引图书实体的标题 重构:改进现有代码的设计,并且 以下查询需要点击: 重构、重 构、 重构 和 重构。在 Lucene 中选择一个分析器类,该类在索引和搜索时应用单词强制。Hibernate Search 提供多种配置分析器的方法(请参阅默认分析器和按类分析器 ),了解更多信息:
-
在配置文件中设置
analyzer属性。指定类成为默认分析器。 -
在实体级别上设置
@Analyzer注释。 -
在字段级别上设置
@Analyzer注释。
指定要使用的完全限定类名称或分析器,或者查看由 @AnalyzerDef 注释定义的分析器,以及 @Analyzer 注释。使用 Solr 分析器框架及其工厂选择后一个选项。有关工厂类的更多信息,请参阅 Solr JavaDoc 或阅读 Solr Wiki 的对应章节。
在示例中,两个过滤器工厂使用 StandardTokenizerFactory:LowerCaseFilterFactory 和 SnowballPorterFilterFactory。令牌者在标点字符和连字符分割单词,但保持电子邮件地址和互联网主机名不变。标准令牌程序是这一操作和其他常规操作的理想选择。小写过滤器将令牌中的所有字母转换为小写,snowball 过滤器则应用特定于语言的逻辑。
如果使用 Solr 框架,请使用带任意数量的过滤器的令牌程序。
示例:使用 @AnalyzerDef 和 Solr Framework 来定义和使用分析器
@Indexed
@AnalyzerDef(
name = "customanalyzer",
tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
@TokenFilterDef(factory = SnowballPorterFilterFactory.class,
params = { @Parameter(name = "language", value = "English") })
})
public class Book implements Serializable {
@Field
@Analyzer(definition = "customanalyzer")
private String title;
@Field
@Analyzer(definition = "customanalyzer")
private String subtitle;
@IndexedEmbedded
private Set authors = new HashSet();
@Field(index = Index.YES, analyze = Analyze.NO, store = Store.YES)
@DateBridge(resolution = Resolution.DAY)
private Date publicationDate;
public Book() {
}
// standard getters/setters follow here
...
}
使用 @AnalyzerDef 定义分析器,然后使用 @Analyzer 将它应用到实体和属性。在该示例中,定义了 customanalyzer,但不应用于实体。分析器仅适用于 标题 属性。分析器定义是全局的。为实体定义分析器,并根据需要为实体重新利用定义。
和副标题