gpt4 book ai didi

elasticsearch - 休眠搜索和Elasticsearch:找不到字段[…]的mapper_parsing_exception +分析器[…]

转载 作者:行者123 更新时间:2023-12-03 01:19:28 26 4
gpt4 key购买 nike

我正在使用休眠搜索自动为特定实体创建索引

@Entity
@Indexed
public class Entity extends BaseEntity {

private static final long serialVersionUID = -6465422564073923433L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@Field(bridge = @FieldBridge(impl = PropertyFieldBridge.class))
private List<PropertyValue> properties = new ArrayList<>(); // PropertyValue is an abstract

}

字段桥正在创建格式为pt_ [a-zA-Z0-9] + _ i18n的字符串字段。

之后,我将创建一个动态模板来处理翻译后的字段:
PUT {{elasticsearch}}/com.orm.entity.entity.entity/com.orm.entity.entity.Entity/_mapping
{
"com.gamila.api.orm.entity.entity.Entity": {
"dynamic_templates": [
{
"my_analyzer": {
"match_mapping_type": "string",
"match_pattern": "regex",
"match": "^pt_[a-zA-Z0-9]+_i18n",
"mapping": {
"type": "text",
"analyzer": "portugueseAnalyzer"
}
}
}
]
}
}

但是当我创建一个实体时,它总是返回一个错误:
Response: 400 'Bad Request' with body 
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "analyzer [portugueseAnalyzer] not found for field [pt_name_i18n]"
}
],
"type": "mapper_parsing_exception",
"reason": "analyzer [portugueseAnalyzer] not found for field [pt_name_i18n]"
},
"status": 400
}

通过以下方法定义portugueseAnalyser:
public class Analyzer implements ElasticsearchAnalysisDefinitionProvider {

@Override
public void register(ElasticsearchAnalysisDefinitionRegistryBuilder builder) {
builder.analyzer("portugueseAnalyzer")
.withTokenizer("standard")
.withTokenFilters("lowercase", "portugueseStemmer", "portugueseStop", "edge_ngram_3");

builder.tokenFilter("portugueseStemmer")
.type("stemmer").param("language", "portuguese");
builder.tokenFilter("portugueseStop")
.type("stop").param("stopwords", "_portuguese_");
}

}

有人可以告诉我我在做什么错吗?我已经在stackoverflow中浏览了一些问题,但没有成功。

PS:我正在使用来自AWS的elasticsearch(5.6)

提前致谢

最佳答案

当Hibernate Search 5将映射推送到Elasticsearch时,它将仅包含映射中某处实际使用的分析器的分析器定义。在您的情况下,就Hibernate Search而言,没有使用分析器,因此将其忽略。

作为Hibernate Search 5中的一种解决方法,您可以声明一个使用您的分析器的伪字段,但永远不要填充它。您可以找到有关如何执行here的示例。

关于elasticsearch - 休眠搜索和Elasticsearch:找不到字段[…]的mapper_parsing_exception +分析器[…],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60928554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com