我想我一次又一次地盯着一个错误弄瞎了自己,真的需要一些输入。我有一套时间序列文件。现在,我想找到跟在一个特定id后面的五个文档。然后获取以下五个没有此id的文档:
var documents = client.Search<Document>(s => s
.Query(q => q
.ConstantScore(cs => cs
.Filter(f => f
.Bool(b => b
.Must(must => must
.DateRange(dr => dr.Field(field => field.Time).GreaterThanOrEquals(startDoc.Time))
.MustNot(mustNot => mustNot
.Term(term => term.Id, startDoc.Id))
))))
.Take(5)
.Sort(sort => sort.Ascending(asc => asc.Time))).Documents;
我的问题是,虽然5个文档被正确地返回和排序,但起始文档在返回的数据中。我试图用“不得”过滤器过滤掉这个,但似乎不起作用。我很肯定我在其他地方也做过,所以可能是一个我根本看不到的小问题:)
以下是nest生成的查询:
{
"query":{
"constant_score":{
"filter":{
"bool":{
"must":[
{
"range":{
"time":{
"gte":"2020-08-31T10:47:12.2472849Z"
}
}
}
],
"must_not":[
{
"term":{
"id":{
"value":"982DBC1BE9A24F0E"
}
}
}
]
}
}
}
},
"size":5,
"sort":[
{
"time":{
"order":"asc"
}
}
]
}
1条答案
按热度按时间lvjbypge1#
这可能是因为id字段可能是已分析的字段。分析的字段被标记化。有一个未分析的版本,为了精确匹配(就像你在评论中提到的,你有一个),并在你的过滤器中使用它将修复你看到的差异。
这里有更多关于分析字段和非分析字段的信息