1

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

关于如何在现场获得通配符的任何想法?

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

4

1 回答 1

2

您可以使用将 a和给定字符串(在本例中为 )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"))));
于 2014-10-31T02:43:14.270 回答