我正在编写一个python脚本来获取elasticsearch索引中的唯一值。我使用术语聚合来获取唯一值及其计数。但是,当我将字段列表传递给脚本时,我意识到有些字段存储为
"abc" : {
"type" : "keyword"
}
有些储存为
"xyz" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
}
在术语聚合期间,我使用查询
{
"aggs" : {
"abc" : {
"terms" : {
"field" : "abc"
}
}
}, "size":0
}
但是当这个查询用于“xyz”时,它会给出错误 Fielddata is disabled on text fields by default. Set fielddata=true on [description] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.
要运行“xyz”的查询,我需要在其中添加“.keyword”,但是“”不会运行。
是否有任何方法可以检查哪个字段属于哪个类型,然后使用if/else相应地更新查询?
1条答案
按热度按时间o0lyfsai1#
您可以同时拥有这两个属性--字段可以聚合,也可以搜索
.keyword
符号。只需按照error msg的建议调整Map:然后重新索引&你就可以走了。
至于是否有查询时间检查来确定哪些字段是-没有。elasticsearch的核心原则之一是字段类型是预先确定和定义的,以便对其进行适当的索引,从而优化搜索/聚合。因此,在查询时假设您知道哪些字段属于哪种类型。