Hibernate search 6 自定义索引设置

分享于2022年07月17日 elasticsearch hibernate-search jpa kotlin spring-boot 问答
【问题标题】:Hibernate search 6 自定义索引设置(Hibernate search 6 custom index settings)
【发布时间】:2022-01-26 14:22:59
【问题描述】:

我想配置一个自定义标记器,以便在带有 Spring Boot 2.5.x 的 Hibernate Search (6.0.8) 中的自定义分析器中使用。根据文档 ( https://docs.jboss.org/hibernate/search/6.1/reference/en-US/html_single/#_custom_index_settings ),我应该使用这样的自定义索引设置:

spring:
  jpa:
    properties:
      hibernate:
        search:
          enabled: true
          backend:
            indexes:
              Lemma:
                analysis:
                  configurer: class:**.**.CustomAnalysisConfigurer
                schema_management:
                  settings_file: custom/index-settings.json

我的 custom/index-settings.json 看起来像

{
  "analysis": {
    "tokenizer": {
      "custom_ngram_tokenizer": {
        "type": "ngram",
        "min_gram": "2",
        "max_gram": "3"
      }
    }
  }
}

CustomAnalysisConfigurer 看起来像

package ***.elasticsearch

import org.hibernate.search.backend.elasticsearch.analysis.ElasticsearchAnalysisConfigurationContext
import org.hibernate.search.backend.elasticsearch.analysis.ElasticsearchAnalysisConfigurer

class CustomAnalysisConfigurer : ElasticsearchAnalysisConfigurer {
    override fun configure(context: ElasticsearchAnalysisConfigurationContext) {
        context.analyzer("customAnalyzer").custom().tokenizer("custom_ngram_tokenizer")
    }
}

我想在我的实体中调用它 @FullTextField(analyzer = "customAnalyzer")

当我在 CustomAnalysisConfigurer 中使用默认的可用标记器(如 ngram )时,一切正常。但我希望 Hibernate 会使用来自 custom/index-settings.json 的设置为我创建一个索引。看起来文件根本没有被拾取。也试过了:

spring:
  jpa:
    properties:
      hibernate:
        search:
          enabled: true
          backend:
            analysis:
              configurer: class:**.**.CustomAnalysisConfigurer
            schema_management:
              settings_file: custom/index-settings.json

设置对所有索引都有效。但这也没有想要的结果。

PS **.** 仅用于掩蔽 ;)


【解决方案1】:

这不适用于 6.0.x,但在文档中有所提及。我发现还有一个 6.1.x 版本的 Hibernate Search,而且这个版本按预期工作。