我想检索有关字符串字段的数据,如最小,最大和平均长度(通过计算字符串中的字符数)。我的问题是聚合只能用于数字字段。此外,我使用简单的统计方面进行了尝试,
"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)”这个词可能看起来有点奇怪,但是后面我们还会遇到很多在对象上调用函数的例子。 函数调用的语法称
问题内容: 如果长度超过10个字符,我想修剪字符串。 假设字符串长度为12(),则新的修剪后的字符串将包含。 我该如何实现? 问题答案: s = s.substring(0, Math.min(s.length(), 10)); 这样使用字符串可以避免在字符串已经短于的情况下出现异常。 笔记: 上面做了真正的修剪。如果您实际上想将截断的最后三个(!)字符替换为点,请使用Apache Commons