elasticsearch 使用Elasticsearch和NEST从id返回以下五个文档,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 使用Elasticsearch和NEST从id返回以下五个文档,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 使用Elasticsearch和NEST从id返回以下五个文档

elasticsearch 使用Elasticsearch和NEST从id返回以下五个文档,elasticsearch,nest,elasticsearch,Nest,我想我已经一次又一次地盯着一个错误看得目瞪口呆,真的需要一些输入。我有一套时间序列文件。现在,我想查找特定id后面的五个文档。我首先获取单个文档。然后获取以下五个没有此id的文档: var documents=client.Search(s=>s .Query(q=>q .ConstantScore(cs=>cs .Filter(f=>f .Bool(b=>b .Must(Must=>Must .DateRange(dr=>dr.Field(Field=>Field.Time)。大于等于(sta

我想我已经一次又一次地盯着一个错误看得目瞪口呆,真的需要一些输入。我有一套时间序列文件。现在,我想查找特定id后面的五个文档。我首先获取单个文档。然后获取以下五个没有此id的文档:

var documents=client.Search(s=>s
.Query(q=>q
.ConstantScore(cs=>cs
.Filter(f=>f
.Bool(b=>b
.Must(Must=>Must
.DateRange(dr=>dr.Field(Field=>Field.Time)。大于等于(startDoc.Time))
.MustNot(MustNot=>MustNot
.Term(Term=>Term.Id,startDoc.Id))
))))
.采取(5)
.Sort(Sort=>Sort.升序(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"
         }
      }
   ]
}

这可能是因为id字段可能是已分析的字段。分析的字段被标记化。有一个未分析的版本,用于精确匹配(就像你在评论中提到的,你有一个),并在你的过滤器中使用它将修复你看到的差异


更多关于分析字段与非分析字段的信息

除非我在这里遗漏了什么,为什么不直接使用
GreaterThan
而不是
GreaterThanOrEquals
,然后省略起始文档这是一个很好的观点。但可能还有其他文件的日期和时间相同。明白。我正在建立一个样本来重现你的情景。同时,您能否共享
NEST
客户端在您的案例中生成的查询?你已经看过了吗?另外,关于映射,有没有可能分析id字段?你搞定了!id字段的类型为
text
,我现在确实记得过去也有类似的问题。我甚至创建了一个名为
id.keyword
的子字段,类型为
keyword
(变老了)