Я использую поиск в спящем режиме, чтобы автоматически создавать индексы для указанной c сущности
@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.
И после этого я создаю шаблон динамического c для работы с переведенными полями:
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: я используюasticsearch (5.6) из AWS
Заранее спасибо