禁用Elasticsearch multi_match查询的分析

时间:2016-01-29 20:33:35

标签: elasticsearch

我的索引使用以下映射:

"mappings": {
  "user": {
    "properties": {
      "address": {
        "properties": {
          "number": {
            "type": "string"
          },
          "street": {
            "type": "string"
          }
        }
      }
    }
  }
}

我使用以下查询

{
  "query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "mystreet 5",
            "fields": "address.*"
          }
        }
      ]
    }
  }
}

这会返回address.street等于mystreetaddress.number等于5的所有对象,因为会分析multi_match查询。

但是,我宁愿搜索确切的字符串。所以我想为查询禁用分析器。基本上我需要term查询来查询多个字段address.*

这可能吗?

1 个答案:

答案 0 :(得分:1)

您可以通过在此phrase查询中指定multi_match类型来实现此目标

{
  "query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "mystreet 5",
            "fields": "address.*",
            "type": "phrase"
          }
        }
      ]
    }
  }
}

这将与lincoln mystreet 5匹配,但不会给您lincoln mystreetsome street 5

如果您正在寻找完全匹配的字段,例如 mystreet 5 不匹配 JFK mystreet 5 ,那么您可以使用multi-fields并分析每个字段两次,一次使用standard analyzer,另一次使用keyword analyzer

希望这有帮助!