我有一个包含对象集合的索引,而对象集合又包含一个布尔值,该布尔值仅对集合中的一个对象成立。我希望能够仅将属性设置为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 bool IsRiskRole { get; set; }
}
您必须像在.Nested中的新查询中那样传递您的条件
.Nested(
y => y
.Path(p => p.InvolvedVessels)
.Query(qq => qq
.Bool(*your bool query*)
))