RemoteTransportException,在文本字段上进行聚合时在文本字段上禁用 Fielddata
RemoteTransportException, Fielddata is disabled on text fields when doing aggregation on text field
我正在从 2.x 迁移到 5.x
我正在像这样向索引添加值
indexInto (indexName / indexType) id someKey source foo
但是我还想按字段获取所有值:
def getValues(tag: String) ={
client execute {
search(indexName / indexType) query ("_field_names", tag) aggregations (termsAggregation( "agg") field tag size 1)
}
但我遇到了这个异常:
RemoteTransportException[[8vWOLB2][172.17.0.5:9300][indices:data/read/search[phase/query]]];
nested: IllegalArgumentException[Fielddata is disabled on text fields
by default. Set fielddata=true on [my_tag] in order to load fielddata
in memory by uninverting the inverted index. Note that this can
however use significant memory.];
我被认为可以使用 keyword
如图所示 here ,但是这些字段在高级(由用户发送)中是未知的所以我不能使用 perpend 映射
默认情况下,所有未知字段都将 indexed/added 作为映射中未指定的文本字段发送到 elasticsearch。
如果您查看此类字段的映射,您会看到为类型为 'keyword' 的此类字段启用了一个字段,并且这些字段已编入索引但未分析。
GET new_index2/_mappings
{
"new_index2": {
"mappings": {
"type": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
因此您可以使用文本字段的字段值进行聚合,如下所示
POST new_index2/_search
{
"aggs": {
"NAME": {
"terms": {
"field": "name.fields",
"size": 10
}
}
}
}
勾选name.fields
因此,如果您可以转移到字段值,您的 Scala 查询就可以工作。
def getValues(tag: String) = {
client.execute {
search(indexName / indexType)
.query("_field_name", tag)
.aggregations {
termsAgg("agg", "field_name.fields")
}.size(1)
}
}
希望这对您有所帮助。
谢谢
我正在从 2.x 迁移到 5.x 我正在像这样向索引添加值
indexInto (indexName / indexType) id someKey source foo
但是我还想按字段获取所有值:
def getValues(tag: String) ={
client execute {
search(indexName / indexType) query ("_field_names", tag) aggregations (termsAggregation( "agg") field tag size 1)
}
但我遇到了这个异常:
RemoteTransportException[[8vWOLB2][172.17.0.5:9300][indices:data/read/search[phase/query]]]; nested: IllegalArgumentException[Fielddata is disabled on text fields by default. Set fielddata=true on [my_tag] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.];
我被认为可以使用 keyword
如图所示 here ,但是这些字段在高级(由用户发送)中是未知的所以我不能使用 perpend 映射
默认情况下,所有未知字段都将 indexed/added 作为映射中未指定的文本字段发送到 elasticsearch。 如果您查看此类字段的映射,您会看到为类型为 'keyword' 的此类字段启用了一个字段,并且这些字段已编入索引但未分析。
GET new_index2/_mappings
{
"new_index2": {
"mappings": {
"type": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
因此您可以使用文本字段的字段值进行聚合,如下所示
POST new_index2/_search
{
"aggs": {
"NAME": {
"terms": {
"field": "name.fields",
"size": 10
}
}
}
}
勾选name.fields
因此,如果您可以转移到字段值,您的 Scala 查询就可以工作。
def getValues(tag: String) = {
client.execute {
search(indexName / indexType)
.query("_field_name", tag)
.aggregations {
termsAgg("agg", "field_name.fields")
}.size(1)
}
}
希望这对您有所帮助。 谢谢