如何在kibana中设置fielddata=true

如何在kibana中设置fielddata=true,kibana,Kibana,我是Kibana的新手,将数据加载到Elastic 5.0.0-alpha3中,并使用Kibana 5.0.0-alpha3进行可视化。我可以将一些数字字段显示为直方图,但当我想使用文本字段时,我得到: Visualize: Fielddata is disabled on text fields by default. Set fielddata=true on [publisher] in order to load fielddata in memory by uninverting th

我是Kibana的新手,将数据加载到Elastic 5.0.0-alpha3中,并使用Kibana 5.0.0-alpha3进行可视化。我可以将一些数字字段显示为直方图,但当我想使用文本字段时,我得到:

Visualize: Fielddata is disabled on text fields by default. Set fielddata=true on [publisher] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.
我被警告说数据(出版商的名字)可能已经被分析成子字段,但我还是想显示出来

如何设置
fielddata=true

编辑:Kibana github上最近的问题表明这是5.0.0中的一个新特性,仍在等待答案

编辑(按照@Val的回答,向弹性新手寻求帮助,希望其他人会发现它有用)。摄取脚本是:

fs = require('fs')

var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
 host: 'localhost:9200',
 log: 'trace'
});

fs.readFile('/Users/pm286/workspace/cmdev/getpapers/20160602/crossref_results.json', (err, data) => {
  if (err) throw err;
   document = JSON.parse(data)
  document = JSON.parse(data)

  for(i=0;i<document.length;i++) {
      client.create({
          index: 'index',
          type: 'type',
          body: document[i]
          })
      }
  });
fs=require('fs'))
var elasticsearch=require('elasticsearch');
var client=new elasticsearch.client({
主机:“localhost:9200”,
日志:“跟踪”
});
fs.readFile('/Users/pm286/workspace/cmdev/getpapers/20160602/crossref_results.json',(err,data)=>{
如果(错误)抛出错误;
document=JSON.parse(数据)
document=JSON.parse(数据)

对于ES映射中的(i=0;i),您需要在
publisher
字段中设置:

PUT your_index/_mapping/your_type
{
   "your_type": {
      "properties": {
        "publisher": {
          "type": "text",
          "fielddata": true
        }
      }
   }
}
进行此更改后,您需要重新编制数据索引,但之后Kibana不会再抱怨了

更新

您可以在中或通过curl执行上述查询

curl -XPUT http://localhost:9200/index -d '{
  "mappings": {
    "type": {
      "properties": {
        "publisher": {
          "type": "text",
          "fielddata": true
        }
      }
    }
  }
}'
也可以在创建文档之前在Javascript文件中执行:

client.indices.create({
  index: 'index',
  body: {
      "mappings": {
        "type": {
          "properties": {
            "publisher": {
              "type": "text",
              "fielddata": true
            }
          }
        }
      }
    }
});

由于您使用的是Elastic 5.x(在我写这篇文章时,5.2已经过时),因此您应该使用新的关键字支持,而不是在索引字段上启用fielddata

提供有关优缺点以及如何设置的良好信息。 从页面:

PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "my_field": { 
          "type": "text",
          "fields": {
            "keyword": { 
              "type": "keyword"
            }
          }
        }
      }
    }
  }
}
然后使用“my_field”字段进行搜索,使用“my_field.keyword”字段进行聚合、排序或脚本


my_field.keyword是您将在Kibana/Grafana中使用的内容。

此代码修复了此问题

PUT megacorp/_mapping/employee
{
   "employee": {
      "properties": {
        "interests": {
          "type": "text",
          "fielddata": true
        }
      }
   }
}
因此,此代码将在以后运行:

GET /megacorp/employee/_search
    {
      "aggs": {
        "all_interests": {
          "terms": { "field": "interests"}
        }
      }
    }

在现有文本字段上启用fielddata,这是在此字段上进行聚合所必需的

PUT megacorp/_mapping/employee
{
  "properties": {
    "interests": { 
      "type":     "text",
      "fielddata": true
    }
  }
}

如果你来自《ElasticsearchThe Financial Guide》一书,请尝试更改此选项

"terms" : { "field" : "interests" },

因此,要运行的代码将成为

GET /megacorp/employee/_search
{
  "aggs": {
    "all_interests": {
      "terms": { "field": "interests.keyword"}
    }
  }
}
“您的类型”字段是什么


已接受/投票。作为一名弹性新手,我希望知道如何/在何处放置此内容。请参阅问题中的最新编辑。我将对此进行测试,并希望给出批准。第二个源代码块包含无效的JSON,它不起作用。@RuiFRibeiro是的,我已添加“fielddata”:True,但仍然得到相同的错误。我知道OP明确询问如何设置fielddata=True,但这是大多数用户想要的答案。设置fielddata=True是Elastic团队自己非常不鼓励的,使用关键字会产生所需的结果,而不会对性能产生负面影响。+1对于文本字段的聚合,y您不再需要设置“fieldData=true”。只需使用“.keyword”字段即可。有关详细信息,请参阅Patrick B的答案。我们在构建代理以使用Body Builder JS搜索时遇到了此问题-当对带空格的文本字段应用排序时,请将其作为关键字访问。
GET /megacorp/employee/_search
{
  "aggs": {
    "all_interests": {
      "terms": { "field": "interests.keyword"}
    }
  }
}
PUT your_index/_mapping/your_type