我的索引有一个包含可变长度随机ID的字符串字段。显然它不应该被分析。 但是我对弹性搜索知之甚少,特别是在创建索引时。 今天我尝试了很多根据id的长度过滤文档,最后我得到了这个groovy脚本:
doc['myfield'].values.size()
或
doc['myfield'].value.size()
两者都返回了神秘的数字,我认为这是因为该领域得到了分析。 如果确实如此,有没有办法获得原始长度或解决问题,而无需重建整个索引?
答案 0 :(得分:5)
使用_source
代替doc
。那是使用文档的来源,意思是初始索引文本:
_source['myfield'].value.size()
如果可能,请尝试将文档重新编入索引:
doc[field]
版本上使用not-analyzed
答案 1 :(得分:1)
Elasticsearch将字符串标记为数据结构(字段数据缓存)中的标记,我们可以在其中访问脚本。
因此,假设您的字段未被分析,doc [' field']。值将如下所示
"In america" => [ "in" , "america" ]
因此,你从doc [' field']得到的。值是一个数组,而不是一个字符串。
现在,即使你有一个令牌或者字段为not_analyzed,故事也不会改变。
"america" => [ "america" ]
现在要查看第一个令牌的大小,您可以使用以下请求
{
"script_fields": {
"test1": {
"script": "doc['field'].values[0].size()"
}
}
}