我具有结构(事件是嵌套文档):
{
"id": 1,
"events": [
{
"id": 1,
"date": "<date 1>"
},
{
"id": 2,
"date": "<date 2>"
},
{
"id": 4,
"date": "<date 3>"
}
]
}
...
使用Elasticsearch.Net和NEST如何进行查询,以选择事件数超过特定数量的文档?
答案 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))));