是否可以在Elasticsearch路径中使用lambda表达式?

问题描述 投票:0回答:1

我有一个包含对象集合的索引,而对象集合又包含一个布尔值,该布尔值仅对集合中的一个对象成立。我希望能够仅将属性设置为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; }
}
.net elasticsearch lambda nest
1个回答
0
投票

您必须像在.Nested中的新查询中那样传递您的条件

.Nested(
      y => y
      .Path(p => p.InvolvedVessels)
      .Query(qq => qq
             .Bool(*your bool query*)
  ))
© www.soinside.com 2019 - 2024. All rights reserved.