elasticsearch - 将JSON转换为Elastic NEST查询无法正常工作

标签 elasticsearch kibana nest

我正在尝试将以下JSON转换为NEST,但无法正常工作。它确实与网站匹配该字段,但与范围不匹配,所以我得到了一些非常古老的结果。
使用Kibana进行搜索时,我发送以下请求:

"query": {
    "bool": {
      "must": [],
      "filter": [
        {
          "bool": {
            "should": [
              {
                "match": {
                  "domain": "website.com"
                }
              }
            ],
            "minimum_should_match": 1
          }
        },
        {
          "range": {
            "@timestamp": {
              "gte": "2020-08-03T12:37:07.821Z",
              "lte": "2020-08-18T12:37:07.821Z",
              "format": "strict_date_optional_time"
            }
          }
        }
      ],
      "should": [],
      "must_not": []
    }
  },
并转换为NEST:
SearchDescriptor<ApacheRequest> Query(SearchDescriptor<ApacheRequest> qc)
{
    var query = qc.Query(q =>
            q.Bool(b =>
                b.Filter(f =>
                    f.Bool(fb =>
                        fb.Should(sh =>
                            sh.Match(ma => ma
                                .Field(x => x.Domain)
                                .Query("website.com")
                            )
                        )
                    ),
                    f => f.Range(r => r.GreaterThanOrEquals(timestamp))
                )
            )
        );

    return query;
}
如我所说,它匹配域,但不匹配范围。即使我已经测试过timestamp是正确的,但我一个月后还是得到了结果。
我究竟做错了什么?

最佳答案

嗯,我发现了问题。我不应该使用.Range(),而是.DateRange()。现在我的查询看起来像这样:

SearchDescriptor<ApacheRequest> Query(SearchDescriptor<ApacheRequest> qc)
{
    var query = qc.Query(q =>
            q.Bool(b =>
                b.Filter(f =>
                    f.Bool(fb =>
                        fb.Must(sh =>
                            sh.Match(ma => ma
                                .Field(x => x.Domain)
                                .Query("website.com")
                            )
                        )
                    ),
                    f => f.DateRange(r =>
                        r.Field(fi => fi.Timestamp).GreaterThanOrEquals(from)
                    )
                )
            )
        );

    return query;
}

关于elasticsearch - 将JSON转换为Elastic NEST查询无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63482535/

相关文章:

ElasticSearch:同一索引中多种类型的性能影响

elasticsearch - 带有通配符的ElasticSearch RestHighLevelClient搜索不起作用

elasticsearch - 如何验证Elasticsearch无痛脚本?

elasticsearch - 如何使用Logstash和grok插件创建字段

elasticsearch - 使用 Elasticsearch 从嵌套对象中过滤多个字段

elasticsearch - Elasticsearch NEST API 7.8西类牙语分析器

elasticsearch - docker 容器的默认 elasticsearch 配置

elasticsearch - Elasticsearch:基于仅在两个映射之一中定义的属性进行过滤

c# - 搜索多个索引并返回正确的类型

elasticsearch - 如何正确地将别名指向索引?