ElasticSearch - 字符串字段长度的统计方面

时间:2014-04-11 21:55:00

标签: elasticsearch facet

我想检索有关字符串字段的数据,如最小,最大和平均长度(通过计算字符串中的字符数)。我的问题是aggregations只能用于数字字段。此外,我尝试使用简单的统计方面,

 "query":{
      "match_all": {}
  }, 
 "facets":{
      "stat1":{
           "statistical":{
               "field":"title"}
               }
          } 

但是我得到了shard失败和SearchPhaseExecutionException。尝试使用脚本字段时,返回的错误是OutOfMemoryError:

  "query":{
       "match_all": {}
   }, 
  "script_fields":{
       "test1":{"script": "doc[\"title\"].value" }
   }

是否可以使用CURL检索有关简单“标题”字符串字段的数据?谢谢!

1 个答案:

答案 0 :(得分:7)

我实际上没有尝试过以下内容,但我相信它应该可行。

首先是一些有用的doc-references:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-statistical-facet.html

  

为了实现统计方面,相关的字段值   从索引加载到内存中。这意味着每个碎片,   应该有足够的内存来包含它们。默认情况下,   动态引入的类型是long和double,一个选项可以减少   内存占用是显式设置相关的类型   可能的字段为short,integer或float。

我不确定如何将脚本字段的类型设置为“short”,这可能是你想要的。减少记忆它应该是可能的。

另外:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-script-fields.html

  

了解它们之间的区别非常重要   doc ['my_field']。value和_source.my_field。第一个,使用doc   关键字,将导致该字段的条款加载到内存   (缓存),这将导致更快的执行,但更多的内存   消费。此外,doc [...]符号仅允许简单的值   字段(不能从它返回一个json对象)并且只对它有意义   未分析或基于单个术语的字段。

所以ALTERNATIVE:将使用_source代替doc而不会缓存长度。

给出:

    {
        "query" : {
            "match_all" : {}
        },
        "facets" : {
            "stat1" : {
                "statistical" : {
                    "script" : "doc['title'].value.length()
                    //"script" : "_source.title.length() //ALTERNATIVE which isn't cached
                }
            }
        }
    }