只能对“文本”类型的字段使用全文搜索。其他类型(数字、日期等)的所有字段都应放在filter子句中。
假设你有一个索引
peopledb
带类型
person
使用默认映射。在
人口数据库
索引您有两个文档:
{
"personId": "wheeler",
"name": "Frank Wheeler",
"personAddress": {
"city": "New York",
"street": "Revolutionary road",
"streetNumber": 115
}
}
和
{
"personId": "harper",
"name": "John Harper",
"personAddress": {
"city": "Glasgow",
"street": "Craigiehall Street",
"streetNumber": 32
}
}
您可以轻松地跨文本字段执行全文搜索:
"query": {
"multi_match": {
"query": "frank harper",
"fields": ["name", "personAddress.city", "personAddress.street"]
}
}
此查询将返回索引中的所有两条记录。但如果你想找到文件
streetNumber
is 115不能只编辑查询并包含
personAddress.streetNumber
进入字段数组,因为
街道号码
字段是标量字段,跨标量字段进行全文搜索没有多大意义。相反,您应该添加一个filter子句:
"query": {
"bool": {
"must": {
"multi_match": {
"query": "frank harper",
"fields": ["name", "personAddress.city", "personAddress.street"]
}
},
"filter": {
"term": {
"personAddress.streetNumber": "115"
}
}
}
}