折叠字段“xxx”的未知类型,仅接受关键字和数字错误

unknown type for collapse field `xxx`, only keywords and numbers are accepted error

如果我在下面的查询中添加一个 collapse 子句,则错误

"unknown type for collapse aircraft_type_search, only keywords and numbers are accepted"

返回。

 {
"query": {
  "bool": {
    "must": {
      "bool": {
        "must": [
          {
            "match": {
              "aircraft_type_search": {
                "query": "piper"
              }
            }
          }
        ]
      }
    },
    "filter": {
      "bool": {
        "must": {
          "term": {
            "display_picture": "yes"
          }
        }
      }
    }
  }
},
"collapse": {
  "field": "aircraft_type_search"
}
}

我也试过 'aircraft_id' 作为折叠字段,因为它是一个整数:

'aircraft_id' => [ 'type' => 'integer', "null_value" => "-1", "ignore_malformed" => 'true', 'include_in_all' => 'false', 'index' => 'not_analyzed' ]

但这导致了错误。

AWS Elastic Search 服务 运行 上的 ES7.1 通过 elasticsearch php sdk。

如果我删除 collapse 子句,查询工作正常。

关于为什么这不起作用的任何想法?

这是因为如错误所述,折叠仅适用于关键字和数字字段。

您有两个解决方案:

  1. 在创建索引时提供字段的关键字映射

    PUT my-index
    {
      "mappings": {
        "properties": {
          "aircraft_type_search" : {
            "type": "keyword"
          }
        }
      }
    }

  1. 使用包含文本和关键字的 Elastic 默认映射,并在查询中调用关键字 :
    "collapse": {
        "field": "aircraft_type_search.keyword"
      }

为了选择最佳解决方案,您必须了解什么是文本或关键字类型。如果你不想深化主题,最简单的方法是解决方案2。