我们说我有
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的那个
答案 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"))))
));