elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

C# 从弹性查询DSL返回不同结果的嵌套搜索查询

C# 从弹性查询DSL返回不同结果的嵌套搜索查询,c#,elasticsearch,nest,C#,elasticsearch,Nest,我有一个名为challenges的ElasticSearch索引,其中包含Challenge类型的对象 当我在Kibana控制台中执行以下过滤器查询时,它返回正确的9个结果 GET challenges/_search { "query": { "bool": { "filter": [ { "term": { "type&

我有一个名为
challenges
的ElasticSearch索引,其中包含
Challenge
类型的对象

当我在Kibana控制台中执行以下过滤器查询时,它返回正确的9个结果

GET challenges/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "type": "Orphan"
          }
        }
      ]
    }
  }
}
但是,来自Nest客户端的以下查询返回零命中率:

var challenges=wait\u client.SearchAsync(s=>s
.Query(q=>+q
.Term(t=>t.Type,Models.Enums.ChallengeType.Orphan)
)
);
我还尝试了以下变化,但没有成功:

var challenges=wait\u client.SearchAsync(s=>s
.Query(q=>q
.Bool(b=>b
.Filter(f=>f
.Term(t=>t
.Field(f=>f.Type)
.Value(challengeType)
)
)
)
)
);
我正在筛选的type属性是具有以下值的枚举:

public enum ChallengeType
{
六个维度,
简介,
正常,,
用户创建,
孤儿,
Youmate
}
并作为关键字存储在索引中。 实际位于索引中的示例对象:

{
“id”:“3bce0ce1-9676-4858-b165-1442a443bf5a”,
“图标”:“waterball.png”,
“索引”:0,
“默认时间”:“09:00”,
“默认天数”:[
“星期六”,
“星期一”,
“星期三”
],
“默认重复”:3,
“类别”:“A”,
“标题”:{
“波斯语”:“波斯语”
},
“维度”:“物理”,
“类型”:“孤立”,
“id包”:“00000000-0000-0000-0000-000000000000”,
“介绍页”:[],
“创建日期”:“2020-10-14T12:39:21.8427517+03:30”,
“通知”:正确,
“模板”:0,
“属于用户”:“00000000-0000-0000-0000-00000000”,
“活动”:错误
}

对于控制台的结果与从嵌套客户端执行时的结果不同,您有什么建议吗?

枚举应标记为
StringEnumAttribute
以序列化为字符串

[StringEnum]
公共枚举挑战者类型
{
六个维度,
简介,
正常,,
用户创建,
孤儿,
Youmate
}

否则,枚举将被序列化为其基础整数值。

嵌套客户端生成的查询是什么?你看了吗?我不知道怎么做。如果它应该在ApiCall->Uri->Query中的response对象中,那么它只是这样:“?typed_keys=true”,并且没有实际筛选查询的指示。您收到的搜索响应有一个名为
DebugInformation
的属性。您可以检查它以查看由
NEST
客户端生成的查询。这里是:从POST成功(200)低级调用生成的有效NEST响应:/challenges/_search?typed_keys=true#此API调用的审核跟踪:-[1]HealthyResponse:Node:take:00:00.4857527#请求:#响应:@SaiGummaluri谢谢。我已经禁用了连接设置上的直接流,它显示了实际的请求。查看这些信息,我发现问题在于我已将属性作为其字符串等效项编制了索引,但查询请求的是其枚举整数值。这就是问题所在。当我在枚举上调用.ToString()时,问题就解决了。