在 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
类型,但记录未显示在索引中。
我该怎么办?
您应该将字段从 text 迁移到 keyword。
在这种情况下,每个新单词都将成为数组的一部分。
例如:
在文档中它看起来像
{
"warnings": [ "CARDHOLDER_INVALID", "WEAK_PASSWORD"]
}
要真正将字段迁移到新类型,您应该使用重新索引
我会添加指南以防万一 https://opster.com/guides/elasticsearch/data-architecture/elasticsearch-change-field-type/