2014-10-30 107 views
1

有没有办法让NEST支持通配符字段。例如。elasticsearch NEST通配符字段

我有这样一个类:

public class SearchDocument 
    { 
     public string Id { get; set; } 
     public string Symbol { get; set; } 
     public IList<DisorderData> Disorders { get; set; } 
    } 

    public class DisorderData 
    { 
     public string Name { get; set; } 
     public string Category { get; set; } 
    } 

我可以很容易地构造一个JSON查询是这样的:(摘自:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

{ 
    "query_string" : { 
     "fields" : ["disorders.*"], 
     "query" : "cancer" 
    } 
} 

如果我在NEST如下:

  client.Search<SearchDocument>(x => x 
       .Query(q => q 
        .QueryString(qs => qs 
         .OnFields(document => document.Disorders) 
         .Query("cancer")))); 

它解析为:

{ 
    "query_string" : { 
     "fields" : ["disorders"], 
    "query" : "cancer" 
    } 
} 

有关如何获得通配符的任何想法?

也许有一个类可以解决属性名称为一个字符串,然后我可以连接星号。

回答

2

可以使用Suffix扩展,将追加一个.和给定的字符串(在这种情况下*)到外地的末尾:

client.Search<SearchDocument>(x => x 
    .Query(q => q 
     .QueryString(qs => qs 
      .OnFields(document => document.Disorders.Suffix("*")) 
      .Query("cancer")))); 

另外,请记住,它总是可能只是将字段名称作为字符串而不是对象路径传递:

client.Search<SearchDocument>(x => x 
    .Query(q => q 
     .QueryString(qs => qs 
      .OnFields(new string[] { "disorders.*" }) 
      .Query("cancer"))));