如何在ElasticSearch中按子节点排序

时间:2019-06-13 14:15:49

标签: nest elasticsearch-6

我正在尝试按子节点对某些产品进行排序。我有产品,每个产品都有一个子节点“ 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;
                    });

0 个答案:

没有答案