【发布时间】:2020-10-14 13:23:51
【问题描述】:
我有一个名为 challenges 的 ElasticSearch 索引,其中包含 Challenge 类型的对象。
当我在 Kibana 控制台中执行下面的过滤查询时,它返回了 9 个结果,都是正确的。
GET challenges/_search
{
"query": {
"bool": {
"filter": [
{
"term": {
"type": "Orphan"
}
}
]
}
}
}
但是,来自 Nest 客户端的以下查询返回零命中:
var challenges = await _client.SearchAsync<Challenge>(s => s
.Query(q => +q
.Term(t => t.Type, Models.Enums.ChallengeType.Orphan)
)
);
我也尝试了以下变体,但无济于事:
var challenges = await _client.SearchAsync<Challenge>(s => s
.Query(q => q
.Bool(b => b
.Filter(f => f
.Term(t => t
.Field(f => f.Type)
.Value(challengeType)
)
)
)
)
);
我要过滤的类型属性是一个具有以下值的枚举:
public enum ChallengeType
{
SixDimensions,
Intro,
Normal,
UserCreated,
Orphan,
Youmate
}
并作为关键字存储在索引中。 实际在索引中的示例对象:
{
"id": "3bce0ce1-9676-4858-b165-1442a443bf5a",
"icon": "water-bottle.png",
"index": 0,
"default-time": "09:00",
"default-days": [
"Saturday",
"Monday",
"Wednesday"
],
"default-repetitions": 3,
"category": "A",
"title": {
"Persian": "آب خوردن"
},
"dimension": "Physical",
"type": "Orphan",
"id-package": "00000000-0000-0000-0000-000000000000",
"intro-pages": [ ],
"date-created": "2020-10-14T12:39:21.8427517+03:30",
"notify": true,
"template": 0,
"belongs-to-user": "00000000-0000-0000-0000-000000000000",
"active": false
}
对于为什么控制台的结果与从 Nest 客户端执行时的结果不同,您有什么建议吗?
【问题讨论】:
-
NEST客户端生成的查询是什么?你看了吗? -
我不知道该怎么做。如果它应该在 ApiCall -> Uri -> Query 中的响应对象中,那么它只是这样:“?typed_keys = true”并且没有指示实际过滤器查询。
-
您收到的搜索响应有一个名为
DebugInformation的属性。您可以检查以查看由NEST客户端生成的查询。 -
这里是:从 POST 上成功的 (200) 低级别调用构建的有效 NEST 响应:/challenges/_search?typed_keys=true # 此 API 调用的审计跟踪:- [1] HealthyResponse:节点:localhost:9200 接受:00:00:00.4857527 # 请求: # 响应:
-
@SaiGummaluri 谢谢。我在连接设置上禁用了直接流式传输,它显示了实际请求。查看信息,我发现问题在于我已将该属性索引为其字符串等价物,但查询正在请求其枚举整数值。因此问题。当我在枚举上调用 .ToString() 时它解决了。
标签: c# elasticsearch nest