gpt4 book ai didi

c# - 嵌套对象上的Elasticsearch过滤器范围

转载 作者:行者123 更新时间:2023-12-03 00:59:04 25 4
gpt4 key购买 nike

我有一个对象PurchaseOrder有一个List<VendorStatus> VendorStatusesVendorStatus有一个EstimatedShipDate列。我需要按最新的EstimatedShipDate过滤采购订单。我怎样才能做到这一点?

我试过了:

Filter<PurchaseOrder>.Range(r => r
.OnField(x => x.VendorStatuses.OrderByDescending(v => v.StatusUpdateDate).First().EstimatedShipDate)
.GreaterOrEquals(fromDate)
.LowerOrEquals(toDate));


var f = Filter<PurchaseOrder>.Range(r => r
.OnField("VendorStatuses.EstimatedShipDate")
.GreaterOrEquals(fromDate)
.LowerOrEquals(toDate));


var newFilter = Filter<PurchaseOrder>.Nested(nfd => nfd.Path(x => x.VendorStatuses.First().EstimatedShipDate))
.Filter(f2 => f2.Range(x => x.OnField(f => f.VendorStatuses.First().EstimatedShipDate)
.GreaterOrEquals(fromDate)
.LowerOrEquals(toDate))));

但是这些都不起作用。我怎样才能做到这一点?

直接针对 flex 运动时,我什至无法使日期范围正常工作。即使使用 head插件,以下查询也不会返回任何结果,尽管我可以在“po”下看到它们
{
"query": {
"range": {
"po.vendorStatuses.estimatedShipDate": {
"gte": "2016-10-01",
"lte": "2016-11-01",
}
}
}
}

我们在 flex 为1.4.5的项目中使用Nest版本1.7.2。

以下是有关我们类型的更多信息:
//that builds our search query, contains many methods to build up the FilterContainer
public class PurchaseOrderSearchQueryBuilder
{
protected FilterContainer Filter { get; set; }

public PurchaseOrderSearchQueryBuilder WithExpectedShipDate(DateTime fromDate, DateTime toDate)
{
var newFilter = Filter<PurchaseOrder>.
//method i need to implment

Filter &= newFilter;

return this;
}
}

//example working filter method
public PurchaseOrderSearchQueryBuilder WithCustomerId(long customerId)
{
if (customerId > 0)
Filter &= Filter && Filter<PurchaseOrder>.Term(p => p.CustomerId, customerId);
return this;
}

public class PurchaseOrder
{
...
public long CustomerId { get; set; }
public List<PoVendorStatus> VendorStatuses { get; set; }
}

public class PoVendorStatus
{
public long Id { get; set; }
...
public DateTime? EstimatedShipDate { get; set; }
public DateTime StatusUpdateDate { get; set; }
}

最佳答案

使用nest这将返回所有具有一个满足条件的内部对象的父对象。如果还要查询嵌套对象,则需要将其映射为nested,并且需要使用nested query

//Fluent
client.Search<PurchaseOrder>(s=>s.Query(
q=>q.DateRange(
dr=>dr.Field(p=>p.VendorStatuses.First().StatusUpdateDate)
.GreaterThan(fromDate)
.LessThan(toDate))));
//Object
client.Search<PurchaseOrder>(new SearchRequest<PurchaseOrder>()
{
Query =new DateRangeQuery
{
//If you used all default mappings this might be camelCase
Field = "VendorStatuses.StatusUpdateDate",
GreaterThan = fromDate,
LessThan = toDate
}
});

关于c# - 嵌套对象上的Elasticsearch过滤器范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40311027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com