使用Elastic.Clients.Elasticsearch在elasticsearch查询中多个Must

56lgkhnf  于 5个月前  发布在  ElasticSearch
关注(0)|答案(1)|浏览(90)

我正在尝试使用新的c# API查询数据。我知道字段值,只想检索正确的记录。

// client is an instance of ElasticsearchClient

var response = await client.SearchAsync<EffectSerie>(s => s
    .Index(_indexName)
    .Query(q => q
        .Bool(b => b
            .Must(sd => sd
                .Term(t => t.startDate, "2023-11-01")
                .Term(t => t.endDate, "2023-11-02")
                .Term(t => t.periodType, 4)
            )
        )
    )
);

字符串
但是,这将获取所有具有匹配periodType的记录。我使用的是最新版本的Elastic.Clients.Elasticsearch,而不是Nest。

kxeu7u2r

kxeu7u2r1#

为了解决这个问题,Must选择器上的参数也可以是一个数组。所以正确的方法是将lambda分段一点。

var response = await client.SearchAsync<EffectSerie>(s => s
    .Index(_indexName)
    .Query(q => q
        .Bool(b => b
            .Must(
                mu1 => mu1
                .Range(r => r
                    .DateRange(dr => dr
                        .Field("startDate").Gte(startDate).TimeZone("-01:00:00")
                        .Field("endDate").Lt(endDate).TimeZone("-01:00:00")
                        )
                ),
                mu2 => mu2
                .Term(t => t.periodType, periodType)
            )
        )
    )
);

字符串
这将形成一个工作查询

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "endDate": {
              "gte": "2023-11-05",
              "lt": "2023-11-06",
              "time_zone": "-01:00:00"
            }
          }
        },
        {
          "term": {
            "periodType": {
              "value": 4
            }
          }
        }
      ]
    }
  }
}

相关问题