elasticsearch NEST通配符字段

时间:2014-10-30 17:24:53

标签: nest elasticsearch-net

有没有办法让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"
    }
}

关于如何在野外获得通配符的任何想法?

也许有一个类可以将属性名称解析为字符串然后我可以连接asterik。

1 个答案:

答案 0 :(得分: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"))));