使用NEST在ElasticSearch的IEnumerable属性上配置分析器

时间:2014-05-12 10:59:18

标签: c# elasticsearch nest

我们说我有

class Product
{
  string name;
  List<Order> orders;
}
class Order
{
  string name;
}

如果我尝试将分析器映射到产品名称,则可以使用,但不适用于Order.name

//This work and adds the analyzer on the mapping list.
var resp = client.Map<Product>(map => map
                        .Properties(props => props
                            .String(s =>s
                                .Name(p => p.Name)
                                .IndexAnalyzer("normalize")
                            )
                       ));
//This does not.
var resp = client.Map<Product>(map => map
                        .Properties(props => props
                            .String(s =>s
                                .Name(p => p.orders.First().Name)
                                .IndexAnalyzer("normalize")
                            )
                       ));

我做错了什么,或者这是一个错误?

更多信息: 这些类只是展示问题的一个例子。 如果我在变量上添加[ElasticProperty(Analyzer =“normalize”)]。

实际上,设置看起来像BaseProdcuts中的Product Inherists和BaseProductis是具有List的那个

1 个答案:

答案 0 :(得分:1)

在回答here时,.Name(p => p.Orders.First().Name)告诉ES在“产品”文档中映射“名称”字段。相反,您希望映射到Orders上的“名称”字段,这是产品文档中的一个数组。

请改为尝试:

client.Map<Product>(m => m
    .Properties(pp => pp
        // Map Product.Name
        .String(s => s
            .Name(p => p.Name)
            .IndexAnalyzer("normalize")
        )
        // Map Product.Orders.Name
        .Object<List<Order>>(o => o
            .Name(p => p.Orders)
            .Properties(op => op
                .String(s => s
                    .Name(os => os.First().Name)
                    .IndexAnalyzer("normalize"))))
        ));