虽然这两个给我相同的结果,但是在内部或外部使用过滤器有什么区别?在表现或幕后行动方面有区别吗?
"query": {
"filtered": {
"query": { "match": { "email": "business opportunity" }},
"filter": { "term": { "folder": "inbox" }}
}
}
Run Code Online (Sandbox Code Playgroud)
"query": {
"filtered": {
"query": { "match": { "email": "business opportunity" }}
}
},
"filter": {
"term": { "folder": "inbox" }
}
Run Code Online (Sandbox Code Playgroud) 假设Date可以为null DateTime:
Mapper.CreateMap<SomeViewModels, SomeDTO>()
.ForMember(dest => dest.Date,
opt => opt.MapFrom(src =>
{
DateTime? finalDate = null;
if (src.HasDate == "N")
{
// so it should be null
}
else
{
endResult = DateTime.Parse(src.Date.ToString());
}
return finalDate;
}));
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:"错误30带有语句体的lambda表达式无法转换为表达式树."
当然,我完全清楚我可以简化查询,例如:
Mapper.CreateMap<SomeViewModels, SomeDTO>()
.ForMember(dest => dest.Date,
opt => opt.MapFrom(src => src.HasDate == "N" ? null : DateTime.Parse(src.Date.ToString())));
Run Code Online (Sandbox Code Playgroud)
但是,如果我坚持保留第一个例子的结构,因为我有更复杂的if else语句,第二个例子无法满足或至少不具有可读性,该怎么办?
假设我在这里解释了类似的情况:https: //www.elastic.co/guide/en/elasticsearch/reference/current/search-request-post-filter.html
在我偶然发现这篇文章之前,我一直在使用filter而不是post_filter来实现这种情况,它产生的输出就像post_filter一样.
我的问题是:它们是一样的吗?如果没有,哪一个是推荐的,更有效的方法,为什么?
我对弹性搜索很新,我还没有找到具体的问题.如果已经回答,我会提前道歉,我希望你能指出我正确的方向.
我一直在寻找在NEST中实现以下内容的方法:
"aggs" : {
"fieldA" : {
"terms" : {
"field" : "fieldA"
}
},
"fieldB" : {
"terms" : {
"field" : "fieldB"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这个:
.Aggregations(q => q.Terms("fieldA", r => r.Field(s => s.fieldA)) && q.Terms("fieldB", r => r.Field(s => s.fieldB)))
Run Code Online (Sandbox Code Playgroud)
还有这个:
.Aggregations(q => q.Terms("fieldA", r => r.Field(s => s.fieldA)))
.Aggregations(q => q.Terms("fieldB", r => r.Field(s => s.fieldB)))
Run Code Online (Sandbox Code Playgroud)
哪两个都失败了.我错过了别的什么吗?