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

时间:2015-11-10 11:58:26

标签: search elasticsearch full-text-search analysis

我的索引有一个包含可变长度随机ID的字符串字段。显然它不应该被分析。 但是我对弹性搜索知之甚少,特别是在创建索引时。 今天我尝试了很多根据id的长度过滤文档,最后我得到了这个groovy脚本:

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

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

两者都返回了神秘的数字,我认为这是因为该领域得到了分析。 如果确实如此,有没有办法获得原始长度或解决问题,而无需重建整个索引?

2 个答案:

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