小编Ron*_*ald的帖子

Elasticsearch 2.1:结果窗口太大(index.max_result_window)

我们从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

81
推荐指数
3
解决办法
6万
查看次数

Elasticsearch:过滤器顺序以获得最佳性能

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,然后过滤器位集"合并".为什么订单很重要?

performance elasticsearch

8
推荐指数
2
解决办法
4967
查看次数

grep 和 utf-8 编码的变音符号

我正在运行 Ubuntu,echo $LANG 告诉我我正在使用 UTF-8:“en_US.UTF-8”。

\n\n

我创建了一个目录,其中包含一个名为“\'\xc3\xb6\”(德语元音变音)的文件

\n\n
ronald@lala:~/tempX/test$ ls\n\xc3\xb6\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的理解是,由于 utf-8 编码,文件名由代表一个字符的两个字节组成。因此我很惊讶这个匹配:

\n\n
ronald@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\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么 grep 将 \'\xc3\xb6\' 视为两个非单词字符而不只是一个?

\n\n

最好的问候,\n罗纳德

\n

grep utf-8

6
推荐指数
2
解决办法
1万
查看次数

泽西Joda时间以urlencoded形式的ISO 8601参数

我正在使用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)

iso8601 jersey jodatime

5
推荐指数
1
解决办法
2894
查看次数

禁止访问 Kubernetes API Server

我为 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)

我错过了什么?

kubernetes prometheus

5
推荐指数
1
解决办法
7230
查看次数