Как установить fielddata = true в кибане
Я новичок в 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
?
EDIT: недавние проблемы в Kibana github предполагают, что это новая функция в 5.0.0 и все еще ждет ответа!
ИЗМЕНИТЬ (после ответа @Val и просьбы о помощи Elastic newbie, и надеемся, что другие найдут это полезным). Приемлем script был:
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]
})
}
});
Как включить в него подход @Val?
Ответы
Ответ 1
В вашем ES-сопоставлении вам нужно установить fielddata:true
в поле publisher
:
PUT your_index/_mapping/your_type
{
"your_type": {
"properties": {
"publisher": {
"type": "text",
"fielddata": true
}
}
}
}
Вам нужно будет повторно проиндексировать свои данные после внесения этого изменения, но впоследствии Kibana больше не будет жаловаться.
UPDATE
Вы можете выполнить указанный выше запрос в пользовательском интерфейсе Sense или через 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
}
}
}
}
}
});
Ответ 2
Так как вы используете Elastic 5.x(5.2 сейчас отсутствует, так как я пишу это), вместо этого вы должны использовать новую поддержку ключевых слов вместо включения полевых данных в индексированном поле.
https://www.elastic.co/guide/en/elasticsearch/reference/5.2/fielddata.html содержит хорошую информацию о плюсах и минусах и о том, как это установить.
На странице:
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.
Ответ 3
Этот код исправляет эту проблему.
PUT megacorp/_mapping/employee
{
"employee": {
"properties": {
"interests": {
"type": "text",
"fielddata": true
}
}
}
}
Итак, этот код будет работать после этого:
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests"}
}
}
}
Ответ 4
Включить полевые данные в существующем текстовом поле, это необходимо для агрегации в этом поле
PUT megacorp/_mapping/employee
{
"properties": {
"interests": {
"type": "text",
"fielddata": true
}
}
}
Ответ 5
Я уже создал индекс, и теперь я обнаружил ту же ошибку, что "" Fielddata отключен в текстовых полях по умолчанию. Установите fielddata = true для [name], чтобы загрузить fielddata в память путем инвертирования инвертированного индекса. "Как я могу обновить fielddata = true
POST schools/_bulk {"index": {"_ index": "schools", "_type": "school", "_id": "1", "fielddata": true}} {"name": "Central School", "description": "CBSE Affiliation", "street": "Nagan", "city": "paprola", "state": "HP", "zip": "176115", "location": [31.8955385, 76.8380405 ], "гонорары": 2000, "теги": ["Старшие классы средней школы", "красивый кампус"], "рейтинг": "3.5\n"} {"index": {"_index": "schools", "_type ":" school "," _id ":" 2 "," fielddata ": true}} {" name ":" Школа Святого Павла "," description ":" Afileiation ICSE "," street ":" Dawarka "," city ":" Delhi "," штат ":" Delhi "," zip ":" 110075 "," location ": [28.5733056, 77.0122136]," гонораров ": 5000," тегов ": [" Good Faculty "," Великий спорт "]," rating ":" 4.5\n "} {" index ": {" _ index ":" schools "," _type ":" school "," _id ":" 3 "," fielddata ": true }} {"name": "Crescent School", "description": "Affiliation of State Board", "street": "Tonk Road", "city": "Jaipur", "state": "RJ", "zip": "176114", "местоположение": [26.8535922, 75.7923988], "сборы": 2500, "теги": ["Хорошо оборудованные лаборатории"], "рейтинг": "4.5\n"}
Вывод на изображение вы можете увидеть вывод
Ответ 6
Если вы пришли из книги "ElasticsearchThe Definitive Guide", попробуйте изменить это
"terms" : { "field" : "interests" },
в
"terms" : { "field" : "interests.keyword" },
чтобы запустить код
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests"}
}
}
}