Подтвердить что ты не робот

Как установить 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?

4b9b3361

Ответ 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"}
    }
  }
}