保存数据后 Hibernate Search 无法正确编码

Hibernate Search cannot encode properly after saving data

我正在与 Hibernate Search 合作 Spring Boot 项目。当我将任何记录保存到我的数据库中时,它工作正常。但是当我通过 Luke 打开 Lucene 索引时,似乎该值未编码。我已经在 application.properties 中设置了 Hibernate 的所有属性,但效果不佳。有人可以帮我解决这个问题吗?谢谢

这是分析的字段

@Analyzer(definition = "TagCustomAnalyzer")
    @Field(store = Store.YES)
    @Column(columnDefinition = "nvarchar(255)")
    private String name;

TagCustomAnalyzer

@AnalyzerDef(
        name = "TagCustomAnalyzer",
        tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class),
        filters = {
                @TokenFilterDef(factory = LowerCaseFilterFactory.class),
                @TokenFilterDef(factory = ASCIIFoldingFilterFactory.class),
        }
)

我的application.properties

spring.jpa.properties.hibernate.connection.CharSet=UTF-8
spring.jpa.properties.hibernate.connection.characterEncoding=UTF-8
spring.jpa.properties.hibernate.connection.useUnicode=true
spring.datasource.url=jdbc:log4jdbc:sqlserver://localhost:1433;databaseName=MyDatabase;characterEncoding=UTF-8

它保存正常,我的数据库中的行是编码的,但在 Luke 打开的 lucene 索引中,它显示了这个

This seems to be not encoded

这是四个字段。 titlecontentWithoutHtmlTags 已编码,但其他(从其他浏览器输入)未编码

This is what i see in lucene

有两件事我不确定:

  1. 您确定 Luke,尤其是您的 Luke 版本支持 UTF-8 吗?
  2. 您确定您的 ASCIIFoldingFilterFactory 在索引之前没有弄乱字符串吗?

尽管如此,我不确定您为什么决定直接检查存储值。可能是值被编码成看起来像垃圾的形式,但在从索引中检索它们时总是根据需要重新编码。

您打算如何检索存储的值?如果您想使用 Hibernate Search projections,您可以尝试一下并告诉我们投影值的编码是否正确吗?

请注意,您显示的应用程序属性在这种情况下无关紧要:它们仅供 Hibernate ORM 使用,而不供 Hibernate Search 使用。

我找到了解决方案。测试时我使用 Unikey 所以当文本转到 lucene 索引时,它无法正确索引。

Make sure if you use any kinds of text encode just set it back to Unicode mode