3.3. 使用带有远程缓存的分析器
分析器将输入数据转换为您可以索引和查询的术语。您可以使用 Java 类中的 @Field 注释或直接在 Protobuf 模式中指定分析器定义。
流程
-
包含
analyzee.YES属性,以指示分析属性。 -
使用
@Analyzer注释指定分析器定义。
protobuf 模式
/* @Indexed */
message TestEntity {
/* @Field(store = Store.YES, analyze = Analyze.YES, analyzer = @Analyzer(definition = "keyword")) */
optional string id = 1;
/* @Field(store = Store.YES, analyze = Analyze.YES, analyzer = @Analyzer(definition = "simple")) */
optional string name = 2;
}
Java 类
@ProtoDoc("@Field(store = Store.YES, analyze = Analyze.YES, analyzer = @Analyzer(definition = \"keyword\"))")
@ProtoField(1)
final String id;
@ProtoDoc("@Field(store = Store.YES, analyze = Analyze.YES, analyzer = @Analyzer(definition = \"simple\"))")
@ProtoField(2)
final String description;
3.3.1. 默认分析器定义 复制链接链接已复制到粘贴板!
Data Grid 提供了一组默认的分析器定义。
| 定义 | 描述 |
|---|---|
|
| 将文本字段分成令牌,将空格和分页视为分隔符。 |
|
| Tokenize input 流通过非字母限制,然后将所有字母转换为小写字符。空格和非字母字符将被丢弃。 |
|
| 在空格上分割文本流,并将非空格字符的序列返回为令牌。 |
|
| 将整个文本字段视为单个令牌。 |
|
| 使用 Snowball Porter 过滤器的英语词。 |
|
| 生成默认大小为 3 个 gram 的 n-gram 令牌。 |
|
|
将文本字段分成大于 |
这些分析器定义基于 Apache Lucene,并提供了"as-is"。有关令牌化器、过滤器和 CharFilters 的更多信息,请参阅适当的 Lucene 文档。
3.3.2. 创建自定义分析器定义 复制链接链接已复制到粘贴板!
创建自定义分析器定义并将其添加到 Data Grid Server 安装中。
先决条件
如果 Data Grid Server 正在运行,则停止它。
Data Grid Server 仅在启动时加载类。
流程
-
实施
ProgrammaticSearchMappingProviderAPI。 在以下文件中使用完全限定类(FQN)在 JAR 中打包您的实现:
META-INF/services/org.infinispan.query.spi.ProgrammaticSearchMappingProvider-
将 JAR 文件复制到您的 Data Grid Server 安装的
server/lib目录中。 - 启动 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);
}
}