#c# #elasticsearch #nest
#c# #elasticsearch #nest
Вопрос:
У меня возникли проблемы с определением нескольких анализаторов (и tokenfilters, если уж на то пошло) с использованием NEST версии 7.6.0
Например, с помощью этой конфигурации
_client.Indices.Create(Settin&s.GetElasticIndex(), c =&&t; c
.Settin&s(s =&&t; s
.Analysis(a =&&t; a
.Analyzers(aa =&&t; aa.Standard("standard_en&lish", sa =&&t; sa.StopWords("_en&lish_")))
.Analyzers(aa =&&t; aa.Custom("randomcustom", sa =&&t; sa.Tokenizer("standard"))))
)
.Map<POCO&&t;(mm =&&t;
mm.AutoMap()
.Properties(p =&&t; p
.Text(t =&&t; t.Name(n =&&t; n.Field1).Analyzer("standard_en&lish"))
.Text(t =&&t; t.Name(n =&&t; n.Field2).Analyzer("randomcustom"))
)
)
);
При создании индекса я получаю следующую ошибку:
Удаленный сервер вернул ошибку: (400) Неверный запрос.. Вызов: Код состояния 400 из: PUT /xxx. Ошибка сервера: Тип: mapper_parsin&_exception Причина: «Не удалось проанализировать отображение [_doc]: анализатор [standard_en&lish] не найден для поля [xxx]» Вызвано: «Тип: mapper_parsin&_exception Причина: «анализатор [standard_en&lish] не найден для поля [xxx]»
Если я поменяю определения, я смогу ссылаться на анализатор standard_en&lish, но не на анализатор randomcustom, поэтому последний в wins. Как мне использовать синтаксис fluent для определения нескольких анализаторов?
Ответ №1:
Вам нужно сделать это следующим образом:
_client.Indices.Create(Settin&s.GetElasticIndex(), c =&&t; c
.Settin&s(s =&&t; s
.Analysis(a =&&t; a
.Analyzers(aa =&&t; aa
.Standard("standard_en&lish", sa =&&t; sa.StopWords("_en&lish_"))
.Custom("randomcustom", sa =&&t; sa.Tokenizer("standard"))
)
)
.Map<POCO&&t;(mm =&&t;
mm.AutoMap()
.Properties(p =&&t; p
.Text(t =&&t; t.Name(n =&&t; n.Field1).Analyzer("standard_en&lish"))
.Text(t =&&t; t.Name(n =&&t; n.Field2).Analyzer("randomcustom"))
)
)
);