我正在尝试用他的姓名和姓氏搜索特定的人。我认为同时在两个字段中搜索的最佳选择是bool查询:
{
"query":{
"bool":{
"must":[
{"match": {"name":"Martin"}},
{"match": {"surname":"Mcfly"}}
]
}
}
}
但是bool查询似乎不支持模糊性。那么我该怎么办才能找到“Marty Mcfly”这个人,因为上述查询找不到这个匹配。如果有可能的话,我也很想找到像“Marty J. Mcfly”这样的人。
答案 0 :(得分:1)
bool
只是加入AND / OR / NOT / FILTER操作的包装器。
在您的情况下,使用multi_match
查询是有意义的:
{
"query":{
"bool":{
"must":[
{
"multi_match":{
"query":"Marty J. Mcfly",
"operator": "and",
"fields":[
"name",
"surname"
]
}
}
]
}
}
}
这将搜索name
和surname
字段中的数据,并确保所有字词在两个字段中都必须匹配。
{
"query": {
"bool": {
"must": [
{
"match": {
"name": {
"query": "Martin",
"operator": "and",
"fuzziness": 1
}
}
},
{
"match": {
"surname": {
"query": "Mcfly",
"operator": "and",
"fuzziness": 1
}
}
}
]
}
}
}