У меня есть индекс, связывающий среди прочего коллекцию объектов, которая, в свою очередь, содержит логическое значение, которое может быть истинным только для одного объекта в коллекции. Я хочу иметь возможность извлекать и сортировать только элемент с этим свойством, установленным в 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; }
}