我正在尝试为我的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));
1条答案
按热度按时间qxsslcnc1#
我找到了问题所在。我在myEnum属性上有一个属性,可以将枚举转换为字符串,如下所示:
[JsonConverter(typeof(StringEnumConverter))]
,所以我想我应该传递枚举的字符串值。我尝试传递枚举的底层类型(int),这样它就像一个魅力