Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elasticsearch:如何获取字符串字段的长度(在分析之前)?_Search_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Full Text Search_Analysis - Fatal编程技术网 elasticsearch,full-text-search,analysis,Search,elasticsearch,Full Text Search,Analysis" /> elasticsearch,full-text-search,analysis,Search,elasticsearch,Full Text Search,Analysis" />

Elasticsearch:如何获取字符串字段的长度(在分析之前)?

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

我的索引有一个字符串字段,其中包含一个可变长度的随机id。显然,不应该对它进行分析。 但我对elasticsearch了解不多,尤其是在创建索引时。 今天我尝试了很多根据id的长度过滤文档,最后我得到了这个groovy脚本:

doc['myfield'].values.size()

两者都返回神秘的数字,我认为这是因为分析了字段。
如果真是这样,有没有办法不重建整个索引就获得原始长度或解决问题?

使用
\u source
而不是
doc
。即使用文档的源,即初始索引文本:

_source['myfield'].value.size()
如果可能,请尝试将文档重新索引到:

  • 对该字段的
    未分析版本使用
    doc[field]
  • <> LI>更好的是,在< <强> >之前,找出字段的大小<强> >,并考虑将其大小作为文件本身中的常规字段添加。
Elasticsearch将字符串作为标记存储在数据结构(字段数据缓存)中,我们可以在其中使用脚本访问

因此,假设您的字段未被分析,doc['field']。值如下所示

"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()"
    }
  }
}