有没有办法让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。
答案 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"))));