当前位置: 首页 > 面试题库 >

ElasticSearch-有关字符串字段长度的统计信息

况野
2023-03-14
问题内容

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

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

但出现碎片故障和SearchPhaseExecutionException。尝试使用脚本字段时,返回的错误是OutOfMemoryError:

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

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


问题答案:

我实际上没有尝试过以下方法,但我认为它应该可以工作。

首先是一些有用的文档参考:

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

为了实现统计方面,相关字段值已从索引加载到内存中。这意味着每个分片应该有足够的内存来容纳它们。由于默认情况下,动态引入的类型为long和double,因此减少内存占用的一种方法是在可能的情况下将相关字段的类型显式设置为short,integer或float。

我不确定如何直接将脚本字段的类型设置为“短”,这可能正是您想要的。减少内存。不过应该有可能。

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

了解doc
[‘my_field’]。value和_source.my_field之间的区别很重要。首先,使用doc关键字将导致将该字段的术语加载到内存中(缓存),这将导致执行速度更快,但会占用更多内存。另外,doc表示法仅允许使用简单值字段(无法从中返回json对象),并且仅在未分析或基于单个术语的字段中有意义。

因此,替代:将使用_source而不是doc不缓存长度。

给出:

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


 类似资料:
  • 问题内容: 我试图获取记录在“标题”中,然后是X个字符。 注意:并非所有记录都包含标题字段。 我努力了: 结果,我得到这个错误: 我该如何解决? 问题答案: 您需要考虑到某些文档可能具有空字段。因此,您可以使用常规的空安全运算符。另外,请确保改用POST方法:

  • 问题内容: 我在SQL数据库中有一个字符串,表示一个URL。有些网址很短,有些很长。我真的不知道这是我可能遇到的最长的URL,所以为了安全起见,我会采用较大的值,例如256或512。 当我定义最大字符串长度时(例如,使用SQLAlchemy): 即使实际的字符串较短,这是否也会占用每一行的空间(存储空间)? 我假设这与实现细节有关。我正在使用postgreSQL,但对sqlite和mysql也很感

  • 问题内容: 我正在通过NEST c#使用ElasticSearch。我有很多关于人的信息 我希望能够按lastName以及长度的顺序对项目列表进行过滤和排序,因此名称中只有5个字符的人会出现在结果集的开头,然后是10个字符的人。 所以我想用一些伪代码做类似的事情 我是ElasticSearch的新手,所以任何示例都将非常有帮助。 问题答案: 您可以使用基于脚本的排序进行排序。 作为一个玩具示例,我

  • 如果我想将char数组中的前3个字符作为双精度字符进行解析,而忽略以下字符,那么我真的需要这样做吗? 难道没有一个像这样的函数允许您指定它应该搜索的数字的最大字符串长度吗? 编辑:我希望它打印(它目前这样做),而不是!

  • 要求出字符串的长度(字符的个数),我们可以使用length函数。调用这个函数的语法和我们前面看到的有点不同: int length; length = fruit.length(); 对于这种函数调用,我们称之为在字符串变量fruit上**调用(invoke)**length函数。“调用(invoke)”这个词可能看起来有点奇怪,但是后面我们还会遇到很多在对象上调用函数的例子。 函数调用的语法称

  • 问题内容: 你如何得到一个的长度?例如,我有一个定义如下的变量: 但是,我似乎无法在字符串上找到长度方法。 问题答案: 自Swift 4+起 只是: 原因。 (感谢Martin R) 从Swift 2开始: 在Swift 2中,Apple已将全局功能更改为协议扩展,这些扩展可与符合协议的任何类型匹配。因此,新语法为: (感谢JohnDifool的注意) 从Swift 1开始 使用计数字符方法: 直