【发布时间】:2021-03-29 22:58:57
【问题描述】:
我的弹性搜索中有这些数据,具有这种结构。
如何从这个数组中搜索 firstName、middleName 和 surname?注意:NameDetails 数组长度是动态的。人 A 可能只有一个元素 NameDetails。人 B 可以有 NameDetails 的 3 个元素。
目前,我只能通过gender 进行搜索。我正在使用 NEST nuget C#。这是我的查询。
var response = await _elasticClient.SearchAsync<Person>(s => s
.Query(q => q
.Bool(b => b.Must(
mu => mu
.Match(m => m
.Field(f => f.Gender)
.Query(Gender)
)
)
)
)
);
在 NEST 中,我尝试使用此代码但未返回任何结果。
var response = _elasticClient.Search <Model.Entities.Split.Person.Person> (s => s
.Index("person")
.Query(q => q
.Match(m => m
.Field(f => f.NameDetails.Name[0].NameValue.FirstName)
.Query("Fawsu")
)
)
);
但如果我直接在 ElasticSearch 上运行 DSL 查询并使用下面的查询,它会返回结果。
GET /person/_search
{
"query": {
"match": {
"nameDetails.nameValue.firstName": {
"query": "Fawsu"
}
}
}
}
}
或
GET /person/_search
{
"query": {
"bool": {
"must": [
{
"fuzzy": {
"nameDetails.nameValue.surname": {
"value": "Pibba",
"fuzziness": "AUTO"
}
}
},
{
"fuzzy": {
"nameDetails.nameValue.firstName": {
"value": "Fawsu",
"fuzziness": "AUTO"
}
}
}
]
}
}
}
【问题讨论】:
标签: c# elasticsearch nest