Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在SortFieldDescriptor中使用.Suffix_C#_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

C# 在SortFieldDescriptor中使用.Suffix

C# 在SortFieldDescriptor中使用.Suffix,c#,elasticsearch,nest,C#,elasticsearch,Nest,我的ASP.NET Web API有一个搜索方法,用于在Elasticsearch数据库中搜索特定查询。此外,用户还可以设置排序参数,如要排序的属性,或者是否应按升序或降序排序 http://localhost/api/search?query=jon&sortBy=lastname&sortOrder=desc 控制器使用NEST将请求传递给Elasticsearch var sortProperty=typeof(T).GetProperty(options.SortBy,BindingFl

我的ASP.NET Web API有一个搜索方法,用于在Elasticsearch数据库中搜索特定查询。此外,用户还可以设置排序参数,如要排序的属性,或者是否应按升序或降序排序

http://localhost/api/search?query=jon&sortBy=lastname&sortOrder=desc

控制器使用NEST将请求传递给Elasticsearch

var sortProperty=typeof(T).GetProperty(options.SortBy,BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public);
var sortOrder=options.sortOrder.IndexOf(“desc”,System.StringComparison.OrdinalIgnoreCase)>=0
? 排序器,下降
:排序器。上升;
var result=wait this.elasticClient.SearchAsync(search=>search
.Query(q=>q.MultiMatch(m=>m
.Query(Query)))
.Sort(Sort=>Sort.Field(sfd=>sfd
.Field(新字段(sortProperty))
.命令(sortOrder));
sortProperty
可以是一个文本字段,如本示例中的firstname和lastname。为了能够按此文本字段排序,我添加了“raw”关键字字段

{
“人”:{
“映射”:{
“人”:{
“财产”:{
“出生日期”:{
“类型”:“日期”
},
“名字”:{
“类型”:“文本”,
“字段”:{
“原始”:{
“类型”:“关键字”
}
}
},
“id”:{
“类型”:“整数”
},
“姓氏”:{
“类型”:“文本”,
“字段”:{
“原始”:{
“类型”:“关键字”
}
}
}
}
}
}
}
}
现在我必须在属性firstname和lastname中添加后缀“raw”

.Sort(Sort=>Sort.Descending(p=>p.Firstname.Suffix(“raw”));
但是如何将其添加到我在上面使用的更通用的版本中,其中
sortProperty
sortOrder
用于创建SortFieldDescriptor

类似于以下内容的内容不起作用:

.Sort(Sort=>Sort.Field(sfd=>sfd
.Field(新字段(sortProperty).后缀(“原始”))
.命令(sortOrder));
.Suffix()
仅用于成员表达式

我认为您可以通过简单地使用字符串来表示字段来简化这一过程

因此,与其

var sortProperty = typeof(T).GetProperty(options.SortBy, BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public);
使用
PropertyInfo
创建
字段的实例,您可以使用

var sortOrder = options.SortOrder.IndexOf("desc", System.StringComparison.OrdinalIgnoreCase) >= 0
            ? SortOrder.Descending
            : SortOrder.Ascending;

var result = await this.elasticClient.SearchAsync<Person>(search => search
            .Query(q => q
                .MultiMatch(m => m
                    .Query(query)
                )
            )
            .Sort(sort => sort
                .Field(sfd => sfd
                    .Field($"{options.SortBy}.raw")
                    .Order(sortOrder)
                )
            );
var sortOrder=options.sortOrder.IndexOf(“desc”,System.StringComparison.OrdinalIgnoreCase)>=0
?分拣机下降
:排序器。上升;
var result=wait this.elasticClient.SearchAsync(search=>search
.Query(q=>q
.MultiMatch(m=>m
.Query(查询)
)
)
.Sort(Sort=>Sort
.Field(sfd=>sfd
.Field($“{options.SortBy}.raw”)
.命令(排序器)
)
);
请注意,从
字符串
实例化
字段
时,字符串值是逐字提取的,因此它需要与Elasticsearch中字段的大小写匹配。相反,表达式和
属性信息
是根据
转换的。DefaultFieldNameInferrer()
连接设置
上的
,默认情况下,它将以驼峰方式显示大小写

有从
字符串
属性信息
表达式
字段
实例的隐式转换