【发布时间】:2016-11-27 09:42:51
【问题描述】:
我想做的是在一个索引字段下存储多种语言。我知道我需要here 解释的结构。
这是具有多字段属性“名称”的示例类:
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"))))))));
映射“对象类型 -> 索引名称”是在创建 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,一个 de)
标签: c# .net elasticsearch nest