Мой текущий understanding-Elasticsearch отображения по умолчанию
- Elasticsearch создает отображение индексов в первый раз, когда он получает JSON наборов данных.
- Это сопоставление не может быть изменено, но данные могут быть повторно отображены.
Вопрос-
Забудьте переназначения. Есть ли способ сказать ES вести себя по умолчанию as-
"Consider everything that is not a date to be of string type"
?
Кроме того, я буду сильно проигрывать, если я это сделаю?
Обновление-
я добавил file- config/mappings/_default/mapping.json
со следующим contents-
{
"dynamic_templates": [
{
"template_1": {
"match": "*",
"match_mapping_type": "int",
"mapping": {
"type": "string"
}
},
"template_2": {
"match": "*",
"match_mapping_type": "long",
"mapping": {
"type": "string"
}
}
}
]
}
я также попытался поместить следующую AT- config/default_mapping.json
{
"_default_" : {
"match": "*",
"match_mapping_type": "int",
"mapping": {
"type": "string"
}
}
}
Мой 'мотив' заключается в том, чтобы избавиться от ошибок, которые возникают, если int
и long
типы изменены на string
. Будет ли эта карта всегоint
и long
значениями как string
по всем индексам, которые создаются в будущем? Нужно ли мне вставить этот ключ dynamic_templates
в пределах _all
?
Update II-
Добавление этого файла сопоставления вызывает elasticsearch кашлять вверх
[2014-02-04 10:48:34,396][DEBUG][action.admin.indices.create] [Her] [logstash-2014.02.04] failed to create
org.elasticsearch.index.mapper.MapperParsingException: mapping [mapping.json]
at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$2.execute(MetaDataCreateIndexService.java:312)
at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:298)
at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:135)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:701)
Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Map
at org.elasticsearch.index.mapper.DocumentMapperParser.extractMapping(DocumentMapperParser.java:268)
at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:155)
at org.elasticsearch.index.mapper.MapperService.parse(MapperService.java:314)
at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:193)
at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$2.execute(MetaDataCreateIndexService.java:309)
... 5 more
2014-02-04 10:48:34 +0000 [warn]: temporarily failed to flush the buffer. next_retry=2014-02-04 10:48:33 +0000 error_class="Net::HTTPServerException" error="400 \"Bad Request\"" instance=17509700
* если вы отправляете поле в своем первом документе как число, и это же поле становится строкой во втором документе, операция индекса для второго документа возвращает ошибку. * Любой способ * решить * это? я не возражаю, если * все * отображается как строки. Нет ли какого-либо флага, который говорит- 'Не отображать, не перечеркивать все. '? :) – erbdex
Уверен, что ваш вопрос был, если это имело смысл, и мой ответ предполагал, что вы знали, что это возможно :) [Динамические шаблоны] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current /mapping-root-object-type.html#_dynamic_templates) являются ответом, чтобы избежать указания всех полей, а всего лишь шаблона и используемого отображения. – javanna
@ javanna- Так что-то вроде [this] (http://pastebin.com/raw.php?i=9AvvW3Dc) гарантирует, что все мои значения 'int' и' long' будут сопоставлены с 'string', по всем направлениям ? Не могли бы вы подтвердить? – erbdex