使用Nest ElasticSearch检查列表是否包含具有特定值的对象

monwx1rj  于 2022-11-22  发布在  ElasticSearch
关注(0)|答案(1)|浏览(156)

我正在尝试为我的BoolQuery构建筛选器。
响应对象包含一个对象,该对象包含2个属性,一个bool和另一个对象的列表,如下所示:

responsObject : {

   innerObject :  {
        myinnerObjectBoolProperty: Bool,
        myinnerObjectListProperty : [
            {
                innerObjectType: myEnum,
                // otherProperties
            },
            {
                innerObjectType: myEnum,
                // otherProperties
            }
            
        ]
    } ,
     // other properties
}

我有一个方法,它返回一个IEnumerable<QueryContainer>来为查询构建一个筛选器。在构建筛选器之后,我将它们分配给BoolQuery的Must BoolQuery bQuery属性,并将该BoolQuery分配给SeachRequest的Query属性,然后将其传递给ElasticClient的Search方法

var searchRequest = new SearchRequest()
                   {
                       Query = bQuery,
                    // other assignments
                   };
var response = client.Search<responsObject >(searchRequest);

在上述方法中,
通过bool属性进行过滤的工作方式如下:

if (filterValuesList.Contains("myBoolProperty", StringComparer.OrdinalIgnoreCase))
               {
                   var termQuery = new TermQuery()
                   {
                       Field = "innerObject.myBoolProperty",
                       Value = "true"
                   };
                   queries.Add(termQuery);
               }

但我尝试做的是过滤在myEnum中具有特定值的对象。

var termQuery = new TermQuery()
                   {
                       Field = "innerObject.myinnerObjectListProperty.innerObjectType",
                       Value = "certainType"
                   };

但是当我这样做时,它不起作用。简单地说,我想要实现是以下LINQ语句的等价物:

var result = responsObjects.Where(i =>i.innerObject.myinnerObjectListProperty.Any(p => p.innerObjectType == innerObjectType.CertainType));
qxsslcnc

qxsslcnc1#

我找到了问题所在。我在myEnum属性上有一个属性,可以将枚举转换为字符串,如下所示:[JsonConverter(typeof(StringEnumConverter))],所以我想我应该传递枚举的字符串值。我尝试传递枚举的底层类型(int),这样它就像一个魅力

相关问题