【问题标题】:using Nest DateRange使用嵌套日期范围
【发布时间】:2017-04-28 11:43:58
【问题描述】:

使用this 示例,我想出了以下查询。我没有从中得到任何结果,但是如果我将“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)));

【问题讨论】:

  • 您的日期值以哪种格式存储?

标签: elasticsearch nest


【解决方案1】:

您的字段映射不正确,或者日期格式不正确。请尝试以下操作:

  1. 使用自动映射创建新索引

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

    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)));
    

【讨论】:

  • 谢谢,我认为 DateMath.Anchored 参数需要一个字符串,但结果它需要一个日期时间对象。
  • DateMath.Anchored() 可以采用stringDateTimegithub.com/elastic/elasticsearch-net/blob/5.x/src/Nest/…
  • 好的,由于某种原因,它不适用于我使用格式“dd/mm/yyyy”的字符串
  • 字符串应该采用什么格式才能正常工作?因为我尝试了所有不同的方法都没有成功。
  • @Jynn 使用的string 格式默认情况下需要是您所定位的date 字段上使用的format 的有效格式。如果您想在查询中传递不同的日期格式,那么您也需要在查询中指定formatelastic.co/guide/en/elasticsearch/reference/current/… 本质上,Elasticsearch 需要知道如何解析传递到服务器端的 Date 对象的字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
相关资源
最近更新 更多