我无法使用作为数组的字段执行重要的术语聚合。我的Javascript查询如下所示:
client.search({
index: myIndex,
body: {
query: {
terms: {
myField: ['someuserid']
// also tried with same result... myField: 'someuserid'
}
},
aggregations: {
recommendations: {
significant_terms: {
field: "myField",
min_doc_count: 1
}
}
}
}
})
我收到此错误:
(node:13105) UnhandledPromiseRejectionWarning: Unhandled promise rejection
(rejection id: 1): Error: [illegal_argument_exception] Fielddata is disabled
on text fields by default. Set fielddata=true on [myField] in order to
load fielddata in memory by uninverting the inverted index. Note that this can
however use significant memory.
我的映射如下所示:
{
index: 'myIndex',
type: 'users',
body: {
properties: {
'myField': []
}
}
}
我知道我不需要显式地映射数组数据类型,但是我这样做,所以我可以很容易地看到我对某个type
的字段。在错误消息之后,我将我的映射更改为:
...
properties: {
myField: {
fielddata: "true"
}
}
...
但是,这会导致此错误:
Error: [mapper_parsing_exception] No type specified for field [myField]
如果我要添加一个类型: ... 属性:{ myField:{ 类型:[], fielddata:" true" } } ... 我会得到这个错误:
[mapper_parsing_exception] No handler for type [[]] declared on field [myField]
目前,我正在聚合的数据来自完全使用由此构建的Update API通过Javascript客户端库播种的数据:
const update = {
"upsert": {
"myField": ['myValue']
},
"script": {
"inline": "ctx._source.myField.add(params.itemField)",
"params": {
"itemField": 'itemValue'
}
}
};
const req = {
index: 'myIndex',
type: 'users',
id: 'someuserid',
body: update
}
此查询curl -XGET 'localhost:9200/myIndex/users/_search?pretty'
的匹配将如下所示:
...
{
"_index" : "myIndex",
"_type" : "users",
"_id" : "someuserid",
"_score" : 1.0,
"_source" : {
"myField" : [
"someFieldId1",
"someFieldId1",
"someFieldId2"
]
}
},
...
如何使用数组字段正确执行重要的术语聚合?
答案 0 :(得分:1)
https://www.elastic.co/guide/en/elasticsearch/reference/current/array.html
在Elasticsearch中,没有专用的数组类型。任何领域都可以 默认情况下包含零个或多个值,但是,中包含所有值 数组必须具有相同的数据类型。
假设您使用的是ElasticSearch 5.x,请尝试将键入:[] 更改为键入:“text”或键入:“keyword”强>
对于两者之间的区别,我建议您阅读:https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html
但是在你的情况下,因为它看起来像某种id,它可能不需要分析,所以我建议使用“keyword”而不是“text”。
对于以前版本的ES,请改用“string”。 https://www.elastic.co/guide/en/elasticsearch/reference/2.4/string.html