elasticsearch 使用嵌套日期范围,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 使用嵌套日期范围,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 使用嵌套日期范围

elasticsearch 使用嵌套日期范围,elasticsearch,nest,elasticsearch,Nest,通过示例,我提出了以下查询。我没有从中得到任何结果,但如果我将“01/01/2017”替换为“null”,那么我会得到记录(所有记录都是从2014年开始的,所以我知道它应该返回数据)。有人能帮我吗 var response = elasticClient.Search<AnalyticsFormData>(x => x .Type("formdata") .Size(500) .Query(q => q.Bool(b =>

通过示例,我提出了以下查询。我没有从中得到任何结果,但如果我将“01/01/2017”替换为“null”,那么我会得到记录(所有记录都是从2014年开始的,所以我知道它应该返回数据)。有人能帮我吗

 var response = elasticClient.Search<AnalyticsFormData>(x => x
       .Type("formdata")
       .Size(500)
       .Query(q => q.Bool(b => b.Must
              (mu => mu.MatchPhrase(m => m
          .Field(f => f.AppId)
              .Query(input.FormAppId)))
           .Filter(fi => fi
           .DateRange(r => r
           .Field(f => f.LastUpdated)
           .LessThanOrEquals(DateMath.Anchored("01/01/2017"))))))              
           .Sort(s => s.Ascending(f => f.LastUpdated)));
var-response=elasticClient.Search(x=>x
.类型(“formdata”)
.尺寸(500)
.Query(q=>q.Bool(b=>b.Must
(mu=>mu.MatchPhrase(m=>m
.Field(f=>f.AppId)
.Query(input.FormAppId)))
.Filter(fi=>fi
.DateRange(r=>r
.Field(f=>f.LastUpdated)
.LessThanOrEquals(DateMath.Anchored(“2017年1月1日”)()()))
.Sort(s=>s.升序(f=>f.LastUpdated));

要么是字段映射不正确,要么是日期格式不正确。请尝试以下操作:

  • 使用自动映射创建新索引

    elasticClient.CreateIndex(indexName,
        create => create.Mappings(
            mappings => mappings.Map<AnalyticsFormData>(map => map.AutoMap())
        )
    );
    
    elasticClient.CreateIndex(indexName, create=>create.Mappings( mappings=>mappings.Map(Map=>Map.AutoMap()) ) );
  • 使用以下方法设置日期

    var response = client.Search<AnalyticsFormData>(x => x
        .Size(500)
        .Query(q => q.Bool(b => b.Must
            (mu => mu.MatchPhrase(m => m
        .Field(f => f.AppId).Query("FormAppId")))
        .Filter(fi => fi
        .DateRange(r => r
        .Field(f => f.LastUpdated)
        .LessThanOrEquals(new DateTime(2017, 1, 1))))))
        .Sort(s => s.Ascending(f => f.LastUpdated)));
    
    var response=client.Search(x=>x
    .尺寸(500)
    .Query(q=>q.Bool(b=>b.Must
    (mu=>mu.MatchPhrase(m=>m
    .Field(f=>f.AppId.Query(“FormAppId”))
    .Filter(fi=>fi
    .DateRange(r=>r
    .Field(f=>f.LastUpdated)
    .LessThanOrEquals(新日期时间(2017年1月1日()()())))
    .Sort(s=>s.升序(f=>f.LastUpdated));
    

  • 日期值是以何种格式存储的?谢谢,我原以为DateMath.Anchored参数需要一个字符串,但事实证明它需要一个datetime对象。
    DateMath.Anchored()
    可以采用
    string
    datetime
    :好吧,出于某种原因,它不能使用“dd/mm/yyyy”格式的字符串那么字符串应该采用什么格式才能工作呢?因为我尝试了所有不同的格式,但都没有成功。@Jynn默认情况下,所使用的
    字符串
    格式必须是所针对的
    日期
    字段上使用的
    格式
    的有效格式。如果要在查询中传递不同的日期格式,则还需要在查询中指定
    格式
    :本质上,Elasticsearch需要知道如何解析传递到服务器端日期对象中的字符串。