保存数据后 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
这是四个字段。 title
和 contentWithoutHtmlTags
已编码,但其他(从其他浏览器输入)未编码
This is what i see in lucene
有两件事我不确定:
- 您确定 Luke,尤其是您的 Luke 版本支持 UTF-8 吗?
- 您确定您的
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
我正在与 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
这是四个字段。 title
和 contentWithoutHtmlTags
已编码,但其他(从其他浏览器输入)未编码
This is what i see in lucene
有两件事我不确定:
- 您确定 Luke,尤其是您的 Luke 版本支持 UTF-8 吗?
- 您确定您的
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