关键字字段的聚合失败

时间:2018-02-14 10:20:41

标签: elasticsearch-5

我目前遇到了这个问题,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"
      },

由于文档,谷歌和StackOverflow都没有为这个问题提供答案,我认为存在根本性的错误。

我能想到的唯一一件事是该领域的未设置数据。现在该领域确保有内容。 此外,在此过程中,我已删除查询的其他所有部分以隔离问题,使用aggs以及aggregations,重命名聚合的名称以确保..

以下是请求正文和匿名搜索网址:

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


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

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

我很欣赏如何解决这个难题的任何暗示。

最好的问候

1 个答案:

答案 0 :(得分:1)

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

如果我使用这些值和标准分析器索引字段 数据棕色,     狗,     小狗 ,     狐狸 ,     狐狸,     在,     跳了,     懒,     飞跃,     结束了,     快,夏天,

这是反向索引

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 是两个不同的字段,具有不同的设置但数据相同。