【发布时间】:2020-01-16 19:26:11
【问题描述】:
我有一个包含其他对象集合的索引,该索引又包含一个布尔值,该布尔值只能对集合中的一个对象为真。我希望能够仅检索和排序将此属性设置为 true 的元素。我正在使用 ES v6.2.4
这可行,但返回集合中的第一项
var vesselSort = await _client.SearchAsync<SearchableSituation>(s => s
.Index(_situationIndexer.IndexName)
.From(message.Query.SearchResultsFrom)
.Size(message.Query.SearchResultsSize)
.Sort(sort => sort.Ascending(f => f.Status)
.Field(x => x.Nested(y => y.Path(p => p.InvolvedVessels.First()))
.Field(v => v.InvolvedVessels.First().VesselName.Suffix("keyword"))
.Order(sortOrder)))
.Query(q => q
.Bool(m => m
.Must(queries))));
但我想做这样的事情,这是行不通的:
var vesselSort2 = await _client.SearchAsync<SearchableSituation>(s => s
.Index(_situationIndexer.IndexName)
.From(message.Query.SearchResultsFrom)
.Size(message.Query.SearchResultsSize)
.Sort(sort => sort.Ascending(f => f.Status)
.Field(x => x.Nested(y => y.Path(p => p.InvolvedVessels.First(v => v.IsRiskRole)))
.Field(v => v.InvolvedVessels.First(iv=>iv.IsRiskRole).VesselName.Suffix("keyword"))
.Order(sortOrder)))
.Query(q => q
.Bool(m => m
.Must(queries))));
查询是要应用的可选过滤器,但默认为空
public class SearchableSituation : IEquatable<SearchableSituation>
{
public Guid SituationId { get; set; }
public IEnumerable<SearchableInvolvedVessel> InvolvedVessels { get; set;}
}
public class SearchableInvolvedVessel : IEquatable<SearchableInvolvedVessel
{
public string VesselName { get; set; }
public bool IsRiskRole { get; set; }
}
【问题讨论】:
-
你能分享你的类型(
SearchableSituation等)吗? -
添加了一些代码。另请参阅我之前的问题以获取更多详细信息:stackoverflow.com/questions/59561611/…
标签: .net elasticsearch lambda nest