ElasticSearch词聚合

dy2hfwbg  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(476)

我正在编写一个python脚本来获取elasticsearch索引中的唯一值。我使用术语聚合来获取唯一值及其计数。但是,当我将字段列表传递给脚本时,我意识到有些字段存储为

  1. "abc" : {
  2. "type" : "keyword"
  3. }

有些储存为

  1. "xyz" : {
  2. "type" : "text",
  3. "fields" : {
  4. "keyword" : {
  5. "type" : "keyword"
  6. }
  7. }
  8. }

在术语聚合期间,我使用查询

  1. {
  2. "aggs" : {
  3. "abc" : {
  4. "terms" : {
  5. "field" : "abc"
  6. }
  7. }
  8. }, "size":0
  9. }

但是当这个查询用于“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相应地更新查询?

o0lyfsai

o0lyfsai1#

您可以同时拥有这两个属性--字段可以聚合,也可以搜索 .keyword 符号。只需按照error msg的建议调整Map:

  1. "xyz" : {
  2. "type" : "text",
  3. "fielddata": true
  4. }

然后重新索引&你就可以走了。
至于是否有查询时间检查来确定哪些字段是-没有。elasticsearch的核心原则之一是字段类型是预先确定和定义的,以便对其进行适当的索引,从而优化搜索/聚合。因此,在查询时假设您知道哪些字段属于哪种类型。

相关问题