当前位置:  开发笔记 > 前端 > 正文

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

如何解决《ElasticSearch-字符串字段长度的统计方面》经验,为你挑选了1个好方法。

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

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

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

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

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



1> Geert-Jan..:

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

首先是一些有用的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
                }
            }
        }
    }


哦,我发现了!我应该使用length().它现在就像一个魅力,非常感谢!:)
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有