0

У меня есть модель, как это:Elasticsearch. Не удается найти обычая анализатор

@Getter 
@Setter 
@Document(indexName = "indexName", type = "typeName") 
@Setting(settingPath = "/elastic/elastic-setting.json") 
public class Model extends BaseModel { 
    @Field(type = FieldType.String, index = FieldIndex.analyzed, analyzer = "customAnalyzer") 
    private String name; 
} 

И у меня есть эластичная setting.json внутри ../resources/elastic/elastic-setting.json:

{ 
    "index": { 
    "number_of_shards": "1", 
    "number_of_replicas": "0", 
    "analysis": { 
    "analyzer": { 
     "customAnalyzer": { 
      "type": "custom", 
      "tokenizer": "uax_url_email" 
     } 
     } 
    } 
    } 
} 

I очистите мою эластичную БД, и когда я начну свою заявку, у меня есть исключение:

MapperParsingException[analyzer [customAnalyzer] not found for field [name]] 

Что не так с моим кодом? Помогите мне, пожалуйста!

EDIT

Val, я подумал @Setting, как дополнение к @Document, но похоже, что они являются взаимозаменяемыми. В моем случае я также иметь другую модель, с:

@Document(indexName = "indexName", type = "anotherTypeName") 

Итак, первый я создать индекс с именем «IndexName» для anotherModel, рядом, когда упругая подготовки модели, видим, что индекс с именем «IndexName» уже и он не использует @Setting.

Теперь у меня есть еще один вопрос. Как добавить пользовательский анализатор в уже созданный индекс в java-код, например, в InitializingBean. Что-то вроде - создан ли мой анализатор? нет - создать. да - не создавать.

ответ

1

Измените файл elastic-setting.json так:

{ 
    "index": { 
     "number_of_shards": "1", 
     "number_of_replicas": "0" 
    }, 
    "analysis": { 
    "analyzer": { 
     "customAnalyzer": { 
      "type": "custom", 
      "tokenizer": "uax_url_email" 
     } 
     } 
    } 
    } 
} 

Обратите внимание, что вам нужно удалить индекс первого и воссоздать его.

UPDATE

Можно, конечно, добавить пользовательский анализатор с помощью Java-кода, однако, вы не сможете изменить существующее сопоставление для того, чтобы использовать этот анализатор, так что вы на самом деле лучше обтирать ваш индекс и воссоздать его с нуля с помощью надлежащего файла elastic-setting.json JSON.

+0

Не уверен, что вы имеете в виду ... – Val

+0

Я извиняюсь, у меня другая проблема. Посмотрите на мое редактирование, пожалуйста. – DamienMiheev

+0

Я обновил свой ответ – Val

0

Для Val: Да, я использую что-то вроде этого. Раньше я добавил @Setting в один из моих классов сущностей, но когда я начал приложение, индекс с тем же именем уже был создан, прежде чем Spring Data проанализировала объект с @Setting, а индекс не был изменен, потому что индекс с тем же именем был уже создан.

Теперь я добавляю аннотацию @Setting (path = "elastic-setting.json") на абстрактный baseModel, и сначала был сканирован класс иерархии высокого уровня, и был создан анализатор.