关键字字段聚合失败

aggregation on keyword field fails

我目前遇到的问题是,6 次聚合中有 3 次因错误而失败。

"type": "illegal_argument_exception",
"reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [experience_slug] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory."

有问题的字段定义为类型关键字(doc_values true),因此查询应该没有问题。 (直接取自 _mapping 部分):

      "experience_slug": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        },
        "analyzer": "default",
        "search_analyzer": "default_search"
      },

由于文档、google 和 Whosebug 均未提供此问题的答案,因此我认为存在根本性错误。

我唯一能想到的就是现场未设置的数据。现在该字段肯定有内容。 同样在这个过程中,我删除了查询的所有其他部分以隔离问题,使用 aggs 以及 aggregations,重命名聚合的名称只是为了确定..

这是请求正文和匿名搜索url:

http://localhost:9200/project_development/some_type/_search


{
  "aggregations": {
    "foo": {
      "terms": {
        "field": "experience_slug"
      }
    }
  }
}

官方 docker 容器中的 Elasticsearch 5.2.2,内存有限(但足够)。 日志中也没有条目。

对于如何解决这个难题的任何提示,我将不胜感激。

此致

聚合需要不同的数据结构而不是倒排索引。 例如

如果我用这些值和标准分析器索引一个字段 数据棕色, 狗 , 小狗 , 狐狸 , 狐狸, 在 , 跳了, 懒惰的 , 飞跃, 超过 , 快,夏天,

这是倒排索引

Term      Doc_1   Doc_2   Doc_3
------------------------------------
brown   |   X   |   X   |
dog     |   X   |       |   X
dogs    |       |   X   |   X
fox     |   X   |       |   X
foxes   |       |   X   |
in      |       |   X   |
jumped  |   X   |       |   X
lazy    |   X   |   X   |
leap    |       |   X   |
over    |   X   |   X   |   X
quick   |   X   |   X   |   X
summer  |       |   X   |
the     |   X   |       |   X

聚合使用的结构

Doc      Terms
-----------------------------------------------------------------
Doc_1 | brown, dog, fox, jumped, lazy, over, quick, the
Doc_2 | brown, dogs, foxes, in, lazy, leap, over, quick, summer
Doc_3 | dog, dogs, fox, jumped, over, quick, the

所以对于聚合要么

  • doc_value 应在字段
  • 上启用
  • field_data 应在字段上启用。

现在,

  1. doc_values 只能在 not_analyzed 字符串字段上启用。
  2. field_data 默认在 elasticsearch 5
  3. 分析的字符串字段上禁用

现在解决方案是

  • 在字段 experience_slug.keyword
  • 上聚合
  • 或在 experience_slug.
  • 上启用 field_data

但请确保这两者会给出不同的结果,因为 experience_slug 将根据分析后生成的术语进行汇总

experience_slug.keyword 将聚合字段的完整值。

experience_slug 和 experience_slug.keyword 是两个不同的字段,具有不同的设置但相同的数据。