假设我有
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和BaseProductis的Product Inherists是拥有列表的人
最佳答案
回答here时,.Name(p => p.Orders.First().Name)
告诉ES将“名称”字段映射到“产品”文档上。而是要映射到“订单”上的“名称”字段,该字段是“产品”文档中的一个数组。
尝试以下方法:
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"))))
));
关于c# - 使用NEST在ElasticSearch的IEnumerable属性上配置分析器的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23607174/