3.4. 使用带有远程缓存的 analyzers


分析器将输入数据转换为您可以索引和查询的术语。您可以在 Java 类中使用 @Text 注释指定分析器定义,或者在 Protobuf schema 中直接指定分析器定义。

流程

  1. 使用 @Text 注释给属性添加注释,以指示其值已被分析。
  2. 使用 分析器 属性指定您要用于索引和搜索所需的分析器。

protobuf 模式

/* @Indexed */
message TestEntity {

    /* @Keyword(projectable = true) */
    optional string id = 1;

    /* @Text(projectable = true, analyzer = "simple") */
    optional string name = 2;
}

Java 类

@Text(projectable = true, analyzer = "whitespace")
@ProtoField(value = 1)
private String id;

@Text(projectable = true, analyzer = "simple")
@ProtoField(value = 2)
private String description;

3.4.1. 默认分析器定义

Data Grid 提供了一组默认的分析器定义。

定义描述

standard

将文本字段拆分为令牌,将空格和标点分隔为分隔符。

simple

通过取消限制非字母的令牌化输入流,然后将所有字母转换为小写字符。空格和非字母将被丢弃。

空格

分割空格上的文本流,并将非空格字符序列返回为令牌。

关键字

将整个文本字段视为单一令牌。

stemmer

使用 Snowball Porter 过滤器窃取英语词.

ngram

默认情况下,生成大小为 3 分的 ngram 令牌。

filename

将文本字段分成比 标准 分析器更大的令牌,将空格视为分隔符,并将所有字母转换为小写字符。

小写

将文本的所有字母转换为小写字符,文本不会被令牌化(规范化程序)。

这些分析器定义基于 Apache Lucene。有关令牌工具、过滤器和 CharFilters 的更多信息,请参阅 Apache Lucene 文档。

其他资源

3.4.2. 创建自定义分析器定义

创建自定义分析器定义,并将它们添加到您的 Data Grid Server 安装中。

先决条件

  • 如果 Data Grid Server 正在运行,则停止它。

    Data Grid Server 仅在启动时加载类。

流程

  1. 实施 ProgrammaticSearchMappingProvider API。
  2. 在 JAR 中打包您的实现,在以下文件中带有完全限定类(FQN):

    META-INF/services/org.infinispan.query.spi.ProgrammaticSearchMappingProvider
  3. 将 JAR 文件复制到 Data Grid Server 安装的 server/lib 目录中。
  4. 启动 Data Grid Server。

ProgrammaticSearchMappingProvider 示例

import org.apache.lucene.analysis.core.LowerCaseFilterFactory;
import org.apache.lucene.analysis.core.StopFilterFactory;
import org.apache.lucene.analysis.standard.StandardFilterFactory;
import org.apache.lucene.analysis.standard.StandardTokenizerFactory;
import org.hibernate.search.cfg.SearchMapping;
import org.infinispan.Cache;
import org.infinispan.query.spi.ProgrammaticSearchMappingProvider;

public final class MyAnalyzerProvider implements ProgrammaticSearchMappingProvider {

   @Override
   public void defineMappings(Cache cache, SearchMapping searchMapping) {
      searchMapping
            .analyzerDef("standard-with-stop", StandardTokenizerFactory.class)
               .filter(StandardFilterFactory.class)
               .filter(LowerCaseFilterFactory.class)
               .filter(StopFilterFactory.class);
   }
}

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.