使用NEST在ElasticSearch的IEnumerable属性上配置分析器的问题
本文关键字:配置 分析器 问题 属性 IEnumerable NEST ElasticSearch 使用 | 更新日期: 2023-09-27 18:03:06
假设我有
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")
)
));
是我做错了什么,还是这是一个bug?
更多信息:这些类只是显示问题的一个示例。如果我在变量上添加[ElasticProperty(Analyzer = "normalize")],它就可以工作了。
实际上设置类似于Product Inherists from baseproduccuts BaseProductis是List
正如这里所回答的,.Name(p => p.Orders.First().Name)
告诉ES在Product文档上映射字段'Name'。相反,您希望映射到Orders上的'Name'字段,它是Product文档中的一个数组。
试试这个:
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"))))
));