我正在尝试按子节点对某些产品进行排序。我有产品,每个产品都有一个子节点“ stock”(包含productId(联接字段),stockId,quantityAvailable,quantityReserved ...),因此可以有多个子节点,我需要对所有库存中的productquantableAvailable求和并按它们排序。但是据我了解,用于分类的Elasticsearch查询是一项艰巨的任务。
我试图在Google中搜索类似的问题,而我从Google那里得到的只是使用脚本和要素(请参见下面的代码)。但是在这样的查询中,我不知道如何使用这些解决方案。它很复杂,但是如果您对ElasticSearch的了解很好,我想您会通过看这个简短的说明和我从Google教程开始编写的代码来了解此问题:
SearchDescriptor<T> res = ...;
res.Sort(sort => {
foreach (var item in Order)
{
if (item.ColumnName == "quantity")
{
sort.Script(sc => sc
.Type("number")
.Ascending()
.Script(script => script
.Source("doc['stockQuantityAvailable'].value * params.factor")
.Params(p => p.Add("factor", 1.1))
)
);
}
else if(new[] { "productId", "vendorName", "productType", "name" }.Contains(item.ColumnName))
{
sort.Field(f =>
{
f.Field(new Field(item.ColumnName));
f.Order(item.Ascending ? SortOrder.Ascending : SortOrder.Descending);
return f;
});
}
}
return sort;
});