r - 在索引中查找最频繁的术语(错误:400 - 所有分片都失败)
问题描述
我在 Elasticsearch 中索引了超过 2.000.000 个文档(使用 R 中的 Elastic 库),我想知道特定字段中最常用的术语,比如说,该字段称为“X”,包含字符串。但是,聚合函数会抛出错误:Error: 400 - all shards failed
我在 R 中尝试了以下内容(从弹性库手册调整的示例)。
步骤1
我首先使用映射创建了索引(即,在原始索引中,'X' 字段被索引为'关键字'字段而不是文本',我想这可能是问题所在。
body <- list(test = list(properties = list(
X = list(type="text"),
Y = list(type="long")
)))
if (!index_exists("example")) index_create("example")
mapping_create(index = "example", type = "test", body=body)
第2步
接下来我索引了一堆文档
X <- c("xxx first","xxx second","xxx third","yyy fourth")
Y <- c("21","22","24","17")
data <- data.frame(X,Y)
docs_bulk(x=data,index='example',type = "test")
第 3 步
接下来我创建了聚合查询并在 r 中执行它
body <-
'{
"size": 0,
"aggs": {
"frequent_tags": {
"terms": {"field": "X"}
}
}
}
'
Search(index='example',body=body)
第4步
...我收到错误“错误:400 - 所有碎片都失败”
步骤 5 和 6
接下来我添加了“属性”。到正文(即{“field”:“attribute.X”}),现在执行查询,但没有任何结果。我也试过 {"field": "keyword.X"}),但这也没有给出预期的结果。
预期结果
一个物体说
xxx --> 3 documents
yyy --> 1 document
first --> 1 document
second --> 1 document
fourth --> 1 document
谢谢您的帮助; 如果您需要更多信息,请告诉我。
解决方案
elastic
这里的维护者:在尝试解决 Elasticsearch 方面的问题时,第一件事就是要做connect(errors = "complete")
- 当有一个时,它将在 R 控制台中抛出完整的 Elasticsearch 堆栈跟踪。这应该让您确切知道查询中的问题出在哪里。
我按照你上面的例子,用connect(errors = "complete")
set,我得到:
Search(index='example',body=body)
Error: 400 - all shards failed
ES stack trace:
type: illegal_argument_exception
reason: Fielddata is disabled on text fields by default. Set fielddata=true on
[X] in order to load fielddata in memory by uninverting the inverted index.
Note that this can however use significant memory. Alternatively use a keyword
field instead.
和
elastic::ping()$version$number
[1] "6.6.1"
推荐阅读
- excel - 如何正确计算excel中的百分比变化?
- python - Flask HTMl中的变量加1
- dynamics-crm - 如何调用自定义工作流活动(c# 代码)以启动休息调用按钮单击 IN Dynamics 365
- autodesk-forge - 工具栏上的按钮是如何激活的?
- python - 无法在 MacOS Big Sur 中从 OpenGL 导入 EGL
- c# - 找不到页面 - 剃须刀页面项目中的 .razor,Net 5.0
- python - 如何将过去 1 年和 6 个月的数据从 .txt 提取到两个由 '\t' 分隔的单独 .txt 文件中?
- python - 如何修复“@pytest.mark.parametrize,预期元组中的 PT006 错误名称类型”?
- sql - Snowflake 我们如何在字段数组上运行非透视查询而不是显式声明每个字段?
- asp.net-core - 我需要从 web.Config appSettings 访问值