Что я хотел бы сделать, так это хранить несколько языков в одном поле индекса. Я понимаю, мне нужна структура, как описано here.Как индексировать многополевой элемент с elasticsearch
Ниже приведен пример класса с несколькими поданной недвижимости "Имя":
public class Data
{
public int ID { get; set; }
public string Name { get; set; }
}
отображение индекс:
ElasticsearchConfiguration.Instance.Client.CreateIndex("data", i =>
i.Settings(s =>
s.NumberOfShards(2)
.NumberOfReplicas(0))
.Mappings(m =>
m.Map<Data>(map =>
map.AutoMap()
.Properties(ps => ps
.Text(s => s
.Name(n => n.Name)
.Fields(f => f
.Text(st => st
.Name("en")
.Analyzer("english"))
.Text(st => st
.Name("de")
.Analyzer("german"))))))));
Mapping "тип объекта -> имя индекса" делается на создание ElasticClient. Это, как я отправить данные на сервер elasticsearch:
var dataPartitions = DBUtil.GetData().Partition(1000);
foreach (var partition in dataPartitions)
{
var result = ElasticsearchConfiguration.Instance.Client.Bulk(b => b.IndexMany(partition));
if (!result.IsValid)
{
Environment.Exit(1);
}
}
Итак, я настроил индекс, как я хотел, но я не знаю, как включить отдельные значения для немецких и английских подсвойств в то время как индексы создают. Должен ли я иметь вложенный класс вместо «Имя» с жестко заданными свойствами для каждого языка (в данном случае «en» и «de»)? Или, может быть, отправить отдельный запрос на языковые свойства?
К сожалению вы пытаетесь применить несколько анализатора на то же значение (одно имени для нескольких языков) или иметь несколько значений, которые должны быть проанализировано с помощью анализатора правого (Один немецкого имени, один английского имени ... что могу иметь)? –
Второй вариант. Я знаю, что могу это сделать, если у меня есть свойства в классе Data, например Name_EN, Name_DE. Я пытаюсь избежать обновления класса Data после добавления нового языка. Если ничего не создам отдельный индекс для каждого языка, но тогда у меня есть проблема с потенциально дублируемыми результатами (один en, one de) – drazen