2014-10-30 100 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"))));