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
  ...
}
Copy to Clipboard Toggle word wrap

使用 @AnalyzerDef 定义分析器,然后使用 @Analyzer 将它应用到实体和属性。在该示例中,定义了 customanalyzer,但不应用于实体。分析器仅适用于 标题 和副标题 属性。分析器定义是全局的。为实体定义分析器,并根据需要为实体重新利用定义。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat