首页 > 解决方案 > 如何使用可选参数构造 NEST 查询?

问题描述

我正在使用 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's 列表(不确定这是正确的方法),但努力弄清楚如何将其作为 AND 谓词列表返回。

有任何想法吗?

谢谢

标签: elasticsearchnest

解决方案


最终通过使用 object initialisez 方法而不是 Fluent DSL 来做到这一点“

var searchRequest = new SearchRequest<Listing>
{
   Query = queries
}

queries是一个List<QueryContainer>,我刚刚建立起来,像这样:

queries.Add(new MatchQuery
{
   Field = "CategoryType",
   Query = filter.CategoryType
}

我觉得有更好的方法,我不喜欢我必须将“字段”硬编码为字符串......但它有效。希望有人告诉我一个更好的方法!


推荐阅读