我正在尝试将Search页面放在一起,并使用PlainElastic QueryBuilder功能在c#中构建JSON。我有一个我构建的自定义类,代表索引数据。这些数据包含隐藏在集合下面的集合,这使我在检索任何数据时遇到问题。
这是我的自定义类仅限于相关属性。 SearchResult是主要的父类。名称和角色是子类。
public class SearchResult
{
public Names Names {get; set; }
}
public class Names
{
public String FirstName {get; set; }
public String LastName {get; set; }
public Role Role {get; set; }
}
public class Role
{
public String Id {get; set; }
public String Name {get; set; }
}
我要做的是构造QueryBuilder对象,以根据FirstName,LastName和RoleName的参数查找数据。这是我最初的语法尝试,它为我提供了零结果:
query = new QueryBuilder<SearchResult>()
.Query(q => q
.Bool(b => b
.Must(m => m
.QueryString(qs => qs
.Fields(SearchResult => SearchResult.Names[0].FirstName).Query("John")
)
)
.Must(m => m
.QueryString(qs => qs
.Fields(SearchResult => SearchResult.Names[0].LastName).Query("Smith")
)
)
.Must(m => m
.QueryString(qs => qs
.Fields(SearchResult => SearchResult.Names[0].Role.Name).Query("Manager")
)
)
)
).BuildBeautified();
然后我执行以下操作来获取结果:
string result = connection.Post(Commands.Search("records", "record"), query);
SearchResult<SearchResult> objResult = serializer.ToSearchResult<SearchResult>(result);
如果我删除了角色名称查询的必须部分,我会获得大量与John Smith相对应的SearchResult记录,即使John Smith是Names集合中的第二个或第三个项目。但是,只要我输入角色名称部分,我就没有结果。我是不是要错误地查询这些集合?
我在C#中使用PlainElastic相当新,所以任何建议或输入都会受到赞赏。
由于