使用忽略 UTF-8 字符的 Hibernate Search 进行搜索

Searching with Hibernate Search ignoring UTF-8 chars

我刚刚实现了基于 Hibernate Search 的全文搜索引擎。

我正在寻找一个问题的解决方案。我有波兰语 (UTF-8) 字符的文本,例如:"zażółć gęślą jaźń"。当我搜索 "jaźń" 时,一切正常并且找到了结果。但是当我搜索 "jazn" 时,找不到结果。

我想搜索所有可能的术语:"jaźń"、"jazń"、"jaźn" 和 "jazn",然后找到搜索到的 "zażółć gęślą jaźń" 文本。如何配置 Hibernate Search 来执行此操作?

您必须先定义一个分析器来分析您的文本 indexing/querying。

请参阅有关分析器的 Hibernate 搜索文档 section 1.8,以及有关分析的更完整信息, section 4.3

要解决您的问题,您定义的分析器必须包含 ASCIIFoldingFilter,它将非 ASCII 字符转换为最接近的 ASCII 等效字符(可能还有 LowerCaseFilter)。 See this example

如果您使用 Hibernate Search DSL 来构建查询,它会自动完成。如果您使用常用的 Lucene 构建查询,您有 an example here,它会自动将分析器绑定到字段。

请注意,默认情况下不分析通配符查询,因此如果您使用通配符,则需要先清理字符串,然后再将其传递给查询。

您可以查看如何清理通配符查询的示例 here

它在this sort of code下面使用ASCIIFoldingFilter。