索引时如何添加前缀和后缀

时间:2017-02-20 10:26:02

标签: lucene hibernate-search

如何在索引编制过程中为Hibernate Search中的实体添加后缀和前缀?

我需要这个来执行精确搜索。 例如。如果正在搜索"这是一个测试",则会找到以下条目: * 这是一个测试 *这是一个测试......

所以我发现在索引期间为整个值添加前缀和后缀的想​​法,例如: _____这是一个测试_____

如果有人正在搜索"这是一个测试"并启用完全搜索的复选框,我将搜索字符串更改为_ " _____这是一个测试_____"

我为此创建了一个FilterFactory,但是对于这个,它为每个术语添加了前缀和后缀:

<style type="text/css">
    .fa-3{
      font-size: 30px;
    }
</style>

1 个答案:

答案 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

理解分析仪的用途非常重要,因为通常默认的分析仪并不是您正在寻找的分析仪。