插入ES时,这是我的课程
public class BasicDoc
{
public string Name { get; set; }
public string Url { get; set; }
}
我使用NEST成功将我的文档插入ES。但是我无法进行聚合。我的目标是拥有类似于SQL Group By的东西。到目前为止我做了什么:
var response = elastic.Search<BasicDoc>(s => s
.Aggregations(a => a
.Terms("group_by_url", st => st
.Field(o => o.Url)
))
);
我尝试根据BasicDoc.Url聚合我的文档。说我在ES中有这些:
当我调试时,我的Nest.BucketAggregate将有4个项目键, api , call1 , call2 和 v1 。我只期待2个是/ api / call1 / v1和/ api / call2 / v1。我做错了什么?
答案 0 :(得分:0)
您目前在Url
媒体资源上设置了analysis,这意味着它会被standard analyzer和倒置索引中存储的字词标记化。如果您需要能够在Uri
上搜索并且也需要在其上进行聚合,那么您可以考虑将其映射为multi_field,其中一个字段映射分析它,另一个才不是。这是一个带映射
client.CreateIndex("index-name", c => c
.Mappings(m => m
.Map<BasicDoc>(mm => mm
.AutoMap()
.Properties(p => p
.String(s => s
.Name(n => n.Url)
.Fields(f => f
.String(ss => ss
.Name("raw")
.NotAnalyzed()
)
)
)
)
)
)
);
执行聚合时,您现在可以使用Uri
原始字段
var response = client.Search<BasicDoc>(s => s
.Size(0)
.Aggregations(a => a
.Terms("group_by_url", st => st
.Field(o => o.Url.Suffix("raw"))
)
)
);