选择具有特定数量的嵌套文档项目的文档

时间:2019-03-21 11:08:01

标签: c# .net elasticsearch nested nest

我具有结构(事件是嵌套文档):

{
  "id": 1,
  "events": [
    {
      "id": 1,
      "date": "<date 1>"
    },
    {
      "id": 2,
      "date": "<date 2>"
    },
    {
      "id": 4,
      "date": "<date 3>"
    }
  ]
}
...

使用Elasticsearch.Net和NEST如何进行查询,以选择事件数超过特定数量的文档?

2 个答案:

答案 0 :(得分:1)

Note脚本运行缓慢,如果您有很多文档,最好设置一个field =事件数并对其进行请求。

QueryContainer filterContainer = null;
    filterContainer &= Query<YOURTYPE>.Script(s =>
                    s.Inline("params._source.events.size() > YOURNUMBER"));

    Client.Search<YOURTYPE>(s => s
                                .MatchAll()
                                .Size(10000)
                                .Query(q => q.Bool(b => b.Must(filterContainer )))

答案 1 :(得分:1)

如果您不通过脚本更新events,那么我只会在父文档中保留实际的事件计数。这将使搜索部分更容易,更有效。

文档架构:

public class Document
{
    public int Id { get; set; }
    public int EventsCount => Events?.Count ?? 0;
    public List<Event> Events { get; set; }
}

public class Event
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
}

并查询:

_elasticClient.Search<Document>(s => s
    .Query(q => q
        .Term(t => t.Field(f => f.EventsCount).Value(10))));