我有一个名为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)
)
)
)
)
);
我要过滤的type属性是一个具有以下值的枚举: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客户端执行结果有何不同有任何建议?
最佳答案
枚举应标记为StringEnumAttribute
以序列化为字符串
[StringEnum]
public enum ChallengeType
{
SixDimensions,
Intro,
Normal,
UserCreated,
Orphan,
Youmate
}
否则,枚举将被序列化为其基础整数值。
关于c# - Nest搜索查询从Elastic查询DSL返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64354291/