使用PlainElastic QueryBuilder查询ElasticSearch数据集合

时间:2014-02-18 13:40:12

标签: c# collections elasticsearch

我正在尝试将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相当新,所以任何建议或输入都会受到赞赏。

由于

0 个答案:

没有答案