缩写elasticsearch值

ycggw6v2  于 2023-08-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(126)

我正在使用elasticsearch提取一些值,但它们非常大,我想将它们缩写为小值。我使用脚本字段来做我的缩写使用if else语句。实际上,我正在尝试更改dept值。
当我运行它时,我仍然返回相同的值。查询中是否存在问题?

{
  "query": {
    // query with some filters 
  },
  "script_fields": {
    "abbreviated_dept": {
      "script": {
        "source": "def dept = doc['dept'].value; if (dept == 'Elasticsearch_tech') { return 'ET'; } else if (dept == 'Market_search') { return 'MS'; } else if (dept == 'InfoIN_search') { return 'IIS'; } else { return dept; }"
      }
    }
  }
}

字符串
我得到的响应是一个带有部门和部门计数的表,如

Dept               Dept Count
Elasticsearch_tech  14
Market_search       10
InfoIN_search        6
FS                   4
PS                   2

uelo1irk

uelo1irk1#

你的询问似乎基本合理。但是,需要指出的是,脚本字段只能用于文本和关键字字段,前提是您已经为该特定字段激活了字段数据。Elasticsearch默认关闭文本字段上的fielddata,因为它可以利用大量的堆空间。因此,在打开时需要谨慎。
您可以通过向索引Map发送GET请求来验证dept字段上的fielddata是否被激活:

GET /your_index/_mapping

字符串
如果未激活fielddata,而您试图使用脚本字段,则会收到错误。如果你的部门字段是一个关键字字段,它应该在不激活字段数据的情况下运行。
此外,确定脚本中的dept值是准确的,并且它们与文档中的值精确对应。
但是,如果dept字段的类型为text,并且您没有打开其上的fielddata,请考虑向dept字段添加关键字子字段,或者重新索引数据并将dept字段转换为关键字类型。
下面是使用dept.关键字的示例:

{
  "query": {
    // query with some filters 
  },
  "script_fields": {
    "abbreviated_dept": {
      "script": {
        "source": "def dept = doc['dept.keyword'].value; if (dept == 'Elasticsearch_tech') { return 'ET'; } else if (dept == 'Market_search') { return 'MS'; } else if (dept == 'InfoIN_search') { return 'IIS'; } else { return dept; }"
      }
    }
  }
}


请记住,这只适用于如果你有一个关键字子字段为您的部门领域。如果不这样做,则需要追加一个关键字子字段,或者在dept字段上启用fielddata,同样,考虑到内存使用情况,应该明智地使用它。

相关问题