Elasticsearch:如何获取字符串字段的长度(在分析之前)?
我的索引有一个字符串字段,其中包含一个可变长度的随机id。显然,不应该对它进行分析。 但我对elasticsearch了解不多,尤其是在创建索引时。 今天我尝试了很多根据id的长度过滤文档,最后我得到了这个groovy脚本:Elasticsearch:如何获取字符串字段的长度(在分析之前)?,search,
elasticsearch,full-text-search,analysis,Search,
elasticsearch,Full Text Search,Analysis,我的索引有一个字符串字段,其中包含一个可变长度的随机id。显然,不应该对它进行分析。 但我对elasticsearch了解不多,尤其是在创建索引时。 今天我尝试了很多根据id的长度过滤文档,最后我得到了这个groovy脚本: doc['myfield'].values.size() 或 两者都返回神秘的数字,我认为这是因为分析了字段。 如果真是这样,有没有办法不重建整个索引就获得原始长度或解决问题?使用\u source而不是doc。即使用文档的源,即初始索引文本: _source['myfi
doc['myfield'].values.size()
或
两者都返回神秘的数字,我认为这是因为分析了字段。
如果真是这样,有没有办法不重建整个索引就获得原始长度或解决问题?使用
\u source
而不是doc
。即使用文档的源,即初始索引文本:
_source['myfield'].value.size()
如果可能,请尝试将文档重新索引到:
- 对该字段的
未分析版本使用
doc[field]
<> LI>更好的是,在< <强> >之前,找出字段的大小<强> >,并考虑将其大小作为文件本身中的常规字段添加。
"In america" => [ "in" , "america" ]
因此,您可以从doc['field']中获得值。值是数组而不是字符串
现在,即使您有一个令牌或字段未被分析,故事也不会改变
"america" => [ "america" ]
现在要查看第一个令牌的大小,可以使用以下请求
{
"script_fields": {
"test1": {
"script": "doc['field'].values[0].size()"
}
}
}
当然,它会@Vineth mohan。这同样适用于ES中的
script
s。但是脚本有它的位置,可以克服事先没有经过深思熟虑的集群数据设计。理想情况下,该大小应该与文档作为常规字段同时编制索引,以克服性能损失。我刚刚尝试了_source['myfield']。value,它表示“无法在null对象上获取属性'value'。不知道为什么_source['myfield']为空。那么您的字段似乎没有被存储。@andrestefan-doc['myfield']从主存获取数据,并且比_source['myfield']快得多。这对我不起作用。我使用ES 1.7,只需将doc['text'].value.length()>200
更改为\u source['text'].value.length()>200
我就得到了一个GroovyRuntimeException
告诉我GroovyScriptExecutionException[MissingMethodException[没有方法签名:[.length()适用于参数类型:()值:[]
{
"script_fields": {
"test1": {
"script": "doc['field'].values[0].size()"
}
}
}