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()时,问题就解决了。