我正在使用NEST .NET客户端(6.3.1),并尝试基于多个(可选)参数组成搜索查询。
这是到目前为止我得到的:
var searchResponse = await _client.SearchAsync<Listing>(s => s
.Query(qq =>
{
var filters = new List<QueryContainer>();
if (filter.CategoryType.HasValue)
{
filters.Add(qq.Term(p => p.CategoryType, filter.CategoryType.Value));
}
if (filter.StatusType.HasValue)
{
filters.Add(qq.Term(p => p.StatusType, filter.StatusType.Value));
}
if (!string.IsNullOrWhiteSpace(filter.Suburb))
{
filters.Add(qq.Term(p => p.Suburb, filter.Suburb));
}
return ?????; // what do i do her?
})
);
filter
是具有许多可为空属性的对象。因此,无论我要添加为匹配查询的值是什么。
因此,要实现这一点,我正在尝试建立QueryContainer
的列表(不确定这是正确的方法),但是努力弄清楚如何将其作为AND谓词列表返回。
有什么想法吗?
谢谢
答案 0 :(得分:0)
最终使用对象初始化方法而不是Fluent DSL来完成此操作。”
var searchRequest = new SearchRequest<Listing>
{
Query = queries
}
queries
是一个List<QueryContainer>
,我刚刚建立,就像这样:
queries.Add(new MatchQuery
{
Field = "CategoryType",
Query = filter.CategoryType
}
我觉得有更好的方法,而且我不喜欢将'Field'硬编码为字符串的方式...但是可以。希望有人给我看个更好的方法!