如何在索引编制过程中为Hibernate Search中的实体添加后缀和前缀?
我需要这个来执行精确搜索。 例如。如果正在搜索"这是一个测试",则会找到以下条目: * 这是一个测试 *这是一个测试......
所以我发现在索引期间为整个值添加前缀和后缀的想法,例如: _____这是一个测试_____
如果有人正在搜索"这是一个测试"并启用完全搜索的复选框,我将搜索字符串更改为_ " _____这是一个测试_____"
我为此创建了一个FilterFactory,但是对于这个,它为每个术语添加了前缀和后缀:
<style type="text/css">
.fa-3{
font-size: 30px;
}
</style>
答案 0 :(得分:2)
这不是你应该怎么做的。
您需要的是您索引的字符串被视为唯一令牌。这样,您将只有具有确切令牌的结果。
为此,您需要根据KeywordTokenizer定义分析器。
@Entity
@AnalyzerDefs({
@AnalyzerDef(name = "keyword",
tokenizer = @TokenizerDef(factory = KeywordTokenizerFactory.class)
)
})
@Indexed
public class YourEntity {
@Fields({
@Field, // your default field with default analyzer if you need it
@Field(name = "propertyKeyword", analyzer = @Analyzer(definition = "keyword"))
})
private String property;
}
然后你应该搜索propertyKeyword字段。请注意,分析器定义是全局的,因此您只需声明一个实体的定义,即可供所有实体使用。
查看有关分析器的文档:http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#example-analyzer-def。
理解分析仪的用途非常重要,因为通常默认的分析仪并不是您正在寻找的分析仪。