我的索引使用以下映射:
"mappings": {
"user": {
"properties": {
"address": {
"properties": {
"number": {
"type": "string"
},
"street": {
"type": "string"
}
}
}
}
}
}
我使用以下查询
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "mystreet 5",
"fields": "address.*"
}
}
]
}
}
}
这会返回address.street
等于mystreet
或address.number
等于5
的所有对象,因为会分析multi_match查询。
但是,我宁愿搜索确切的字符串。所以我想为查询禁用分析器。基本上我需要term
查询来查询多个字段address.*
。
这可能吗?
答案 0 :(得分:1)
您可以通过在此phrase
查询中指定multi_match
类型来实现此目标
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "mystreet 5",
"fields": "address.*",
"type": "phrase"
}
}
]
}
}
}
这将与lincoln mystreet 5
匹配,但不会给您lincoln mystreet
或some street 5
。
如果您正在寻找完全匹配的字段,例如 mystreet 5 不匹配 JFK mystreet 5 ,那么您可以使用multi-fields
并分析每个字段两次,一次使用standard analyzer
,另一次使用keyword analyzer
。
希望这有帮助!