ELK和Spring环境下的字符串数组

问题描述 投票:0回答:1

在 ELK 环境中我有一个带有如下语句的管道:

SELECT id,
       types::text,
FROM example_table
WHERE last_modified_date > :sql_last_value
ORDER BY id DESC

和这样的模板:

{
  "index_patterns": [
    "example_records*"
  ],
  "version": 1,
  "mappings": {
    "properties": {
      "@timestamp": {
        "type": "date"
      },
      "@version": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "id": {
        "type": "long"
      },
      "types": {
        "type": "text"
      }
    }
  }
}

types列具有jsonb类型(PostgreSQL)并包含值:

["TYPE_1", "TYPE_2"]

我想通过Spring应用程序从

example_table
读取记录,其中我有一个类

@Document(indexName = "example_records", createIndex = false)
@Data
public class ElasticExampleRecord {
    @Id
    @Field(name = "id")
    private final Long id;

    @Field(name = "types")
    private final List<ExampleType> types;
}

但是我将此数据作为字符串列表获取,其中索引 0 处是像

["TYPE_1", "TYPE_2"]
:

这样的数组
result.types.size() == 1
result.types.get(0) == "["TYPE_1", "TYPE_2"]".

我尝试删除 SQL 语句中的

::text
转换,但出现错误

MissingConverterException: Missing Converter handling for full class name=org.postgresql.util.PGobject, simple name=PGobject".

所以我退回了这个选角。

我尝试删除管道中的类型,但结果是相同的。

我尝试在管道中设置

nested
类型,但记录未显示在索引中。

我该怎么办?

elasticsearch logstash elk
1个回答
0
投票

您应该将字段从 text 迁移到 keyword

在这种情况下,每个新单词都将成为数组的一部分。

例如:

在文档中它看起来像

{                   
  "warnings": [ "CARDHOLDER_INVALID", "WEAK_PASSWORD"]
}

要真正将字段迁移到新类型,您应该使用重新索引

我会添加指南以防万一 https://opster.com/guides/elasticsearch/data-architecture/elasticsearch-change-field-type/

© www.soinside.com 2019 - 2024. All rights reserved.