我们从Elasticsearch 2.1检索信息,并允许用户通过结果进行分页.当用户请求高页码时,我们收到以下错误消息:
结果窗口太大,+大小必须小于或等于:[10000]但是[10020].有关请求大型数据集的更有效方法,请参阅scroll api.可以通过更改[index.max_result_window]索引级别参数来设置此限制
弹性文档说这是因为高内存消耗和使用滚动API:
高于的值会占用每次搜索和执行搜索的每个分片的大量堆内存.保留此值是最安全的,因为它是使用滚动API进行任何深度滚动https://www.elastic.co/guide/en/elasticsearch/reference/2.x/breaking_21_search_changes.html#_from_size_limits
问题是我不想检索大型数据集.我只想从结果集中非常高的数据集中检索切片.滚动文档也说:
滚动不适用于实时用户请求https://www.elastic.co/guide/en/elasticsearch/reference/2.2/search-request-scroll.html
这给我留下了一些问题:
1)如果我使用滚动api向上滚动到结果10020(并忽略10000以下的所有内容)而不是对结果10000-10020进行"正常"搜索请求,那么内存消耗是否真的会降低(如果是这样的话)
2)似乎滚动API对我来说不是一个选项,但我必须增加"index.max_result_window".有人对这个有经验么?
3)还有其他选择来解决我的问题吗?
Elasticsearch指南说
"每个过滤器都是独立计算和缓存的,无论它在何处使用.如果两个不同的查询使用相同的过滤器,则将重用相同的过滤器位集.同样,如果单个查询在多个位置使用相同的过滤器,则只有一个位集计算然后重复使用." (https://www.elastic.co/guide/en/elasticsearch/guide/current/filter-caching.html)
在另一页上它还说:
"bool子句中的过滤器顺序对于性能很重要.更具体的过滤器应该放在不太具体的过滤器之前,以尽可能多地排除尽可能多的文档.如果条款A可以匹配1000万个文档,条款B只能匹配100份文件,则条款B应放在条款A之前." (https://www.elastic.co/guide/en/elasticsearch/guide/current/_filter_order.html)
我不太明白当每个过滤器独立缓存时,bool子句中的过滤器顺序是如何重要的.
我认为从缓存执行或检索子句B,从缓存执行或检索子句A,然后过滤器位集"合并".为什么订单很重要?
我正在运行 Ubuntu,echo $LANG 告诉我我正在使用 UTF-8:“en_US.UTF-8”。
\n\n我创建了一个目录,其中包含一个名为“\'\xc3\xb6\”(德语元音变音)的文件
\n\nronald@lala:~/tempX/test$ ls\n\xc3\xb6\nRun Code Online (Sandbox Code Playgroud)\n\n我的理解是,由于 utf-8 编码,文件名由代表一个字符的两个字节组成。因此我很惊讶这个匹配:
\n\nronald@lala:~/tempX/test$ ls | grep "^\\W\\W$"\n\xc3\xb6\nronald@lala:~/tempX/test$ ls | egrep "^\\W{2,}$"\n\xc3\xb6\nronald@lala:~/tempX/test$ ls | grep -P "^\\W{2,}$"\n\xc3\xb6\nronald@lala:~/tempX/test$ ls | pcregrep "^\\W{2,}$"\n\xc3\xb6\nRun Code Online (Sandbox Code Playgroud)\n\n为什么 grep 将 \'\xc3\xb6\' 视为两个非单词字符而不只是一个?
\n\n最好的问候,\n罗纳德
\n我正在使用Jersey:1.17.1并定义了一个接受"application/x-www-form-urlencoded"的REST服务.我想接受ISO-8601格式的参数"b",让Jersey将其映射到Joda DateTime.
@PUT
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response createTask(@FormParam("a") String a, @FormParam("b") DateTime b) {
...
Run Code Online (Sandbox Code Playgroud)
但我得到了这个例外
SEVERE: The following errors and warnings have been detected with resource and/or provider classes:
SEVERE: Missing dependency for method public de.ast.mae.rest.util.response.Response de.ast.mae.rest.service.tasks.TasksAdminRestService.createTask(java.lang.String,org.joda.time.DateTime) at parameter at index 6
SEVERE: Missing dependency for method public de.ast.mae.rest.util.response.Response de.ast.mae.rest.service.tasks.TasksAdminRestService.createTask(java.lang.String,org.joda.time.DateTime) at parameter at index 6
SEVERE: Method, public de.ast.mae.rest.util.response.Response de.ast.mae.rest.service.tasks.TasksAdminRestService.createTask(java.lang.String,java.lang.String,org.joda.time.DateTime), annotated with PUT of resource, class de.ast.mae.rest.service.tasks.TasksAdminRestService, is not recognized as valid resource method.
Okt 09, 2013 5:54:41 PM …Run Code Online (Sandbox Code Playgroud) 我为 Prometheus 定义了一个 ClusterRole:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: prometheus
labels:
k8s-app: prometheus
rules:
- apiGroups: [""] # "" indicates the core API group
resources:
- namespaces
- endpoints
- services
- nodes
- pods
verbs:
- get
- watch
- list
- nonResourceURLs:
- /metrics
- /api/*
verbs:
- get
Run Code Online (Sandbox Code Playgroud)
Prometheus 能够访问 API-Servers /metrics 路由:
https://10.0.1.104:443/metrics
https://10.0.2.112:443/metrics
Run Code Online (Sandbox Code Playgroud)
但我收到“服务器返回 HTTP 状态 403 禁止”
https://kubernetes.default.svc:443/api/v1/nodes/ip-10-0-0-219.eu-west-1.compute.internal/proxy/metrics
Run Code Online (Sandbox Code Playgroud)
和
https://kubernetes.default.svc:443/api/v1/nodes/ip-10-0-0-219.eu-west-1.compute.internal/proxy/metrics/cadvisor
Run Code Online (Sandbox Code Playgroud)
我以为我有这个覆盖
- nonResourceURLs:
- /api/*
Run Code Online (Sandbox Code Playgroud)
我错过了什么?