【发布时间】:2021-03-31 02:29:39
【问题描述】:
我有这个 DSL 查询,它在 ElasticSearch 控制台中返回结果。
GET /person/_search
{
"query": {
"bool": {
"must": [
{
"query_string": {
"fields": [
"nameDetails.name.nameValue.firstName",
"nameDetails.name.nameValue.surname",
"nameDetails.name.nameValue.middleName"
],
"query": "Pibba Fawsu~"
}
}
]
}
}
}
结果如下:
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 10.335077,
"hits" : [
{
"_index" : "person",
"_type" : "_doc",
"_id" : "70002",
"_score" : 10.335077,
"_source" : {
"gender" : "Male",
"nameDetails" : {
"name" : [
{
"nameValue" : {
"firstName" : "Fawsu",
"middleName" : "L.",
"surname" : "Pibba"
},
"nameType" : "Primary Name"
},
{
"nameValue" : {
"firstName" : "Fausu",
"middleName" : "L.",
"surname" : "Pibba"
},
"nameType" : "Spelling Variation"
}
]
}
}
}
]
}
}
但是当我将查询转换为 NEST C# 时,它没有返回任何结果。
var response = await _elasticClient.SearchAsync<Person>(s => s
.Index("person")
.Query(q => q
.Bool(b => b
.Must(
mu => mu
.QueryString(m => m
.Fields(f => f.Field(f => f.NameDetails.Name[0].NameValue.FirstName))
.Fields(f => f.Field(f => f.NameDetails.Name[0].NameValue.Surname))
.Fields(f => f.Field(f => f.NameDetails.Name[0].NameValue.MiddleName))
.Query("Pibba Fawsu")
)
)
)
)
);
但是当我像下面这样只用FirstName 测试它时,它会返回结果。
var response = await _elasticClient.SearchAsync<Person>(s => s
.Index("person")
.Query(q => q
.Bool(b => b
.Must(
mu => mu
.QueryString(m => m
.Fields(f => f.Field(f => f.NameDetails.Name[0].NameValue.FirstName))
.Query("Pibba Fawsu")
)
)
)
)
);
【问题讨论】: