2013-09-27 4 views
1

Я определил следующее отображение индекса для одного из документов:Elasticsearch: Индекс Mapping для массива целых чисел

{ 
    "favorites":{ 
     "_parent":{ 
     "type":"activities" 
     }, 
     "properties":{ 
     "favorite_count":{ 
      "type":"integer" 
     }, 
     "details":{ 
      "type":"integer", 
      "store":"yes" 
     } 
     } 
    } 
} 

При попытке проиндексировать следующий документ:

{ 
     "favorite_count":3, 
     "details":[ 
      1, 25, 4 
     ] 
} 

я получаю следующее исключение:

org.elasticsearch.index.mapper.MapperParsingException: object mapping [details] trying to serialize a value with no field associated with it, current value [1] 
    at org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue(ObjectMapper.java:595) 
    at org.elasticsearch.index.mapper.object.ObjectMapper.parse(ObjectMapper.java:467) 
    at org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue(ObjectMapper.java:599) 
    at org.elasticsearch.index.mapper.object.ObjectMapper.serializeArray(ObjectMapper.java:587) 
    at org.elasticsearch.index.mapper.object.ObjectMapper.parse(ObjectMapper.java:459) 
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:507) 
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:451) 
    at org.elasticsearch.index.shard.service.InternalIndexShard.prepareIndex(InternalIndexShard.java:329) 
    at org.elasticsearch.action.index.TransportIndexAction.shardOperationOnPrimary(TransportIndexAction.java:203) 
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:521) 
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:419) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:722) 

с этой ссылкой http://www.elasticsearch.org/guide/reference/mapping/array-type/, я считаю, что нет никаких проблем с отображение индекса. Что я делаю не так?

+0

Это похоже на то, что вы пытаетесь передать значения в поле с несовместимым отображением - это сопоставление, которое вы разместили выше того, что возвращает ES, или это то, что вы хотите, чтобы ваше сопоставление было? В любом случае убедитесь, что сопоставление, используемое в настоящее время в ES, соответствует тому, что вы хотите. Похоже, вы пытались обновить карту после того, как у нее уже есть документы. –

+0

Проблема решена. Я неправильно указывал имя типа индекса в остальном, это должно быть «http: // localhost: 9200/test-app/favorites/_mapping», я указывал его как http: // localhost: 9200/test -app/рейтинги/_mapping. – CodePredator

ответ

0

Проблема решена. Я неправильно указывал имя типа индекса в остальном api url, он должен был быть «localhost: 9200/test-app/favorites/_mapping» ;, я указывал его как localhost: 9200/test-app/ratings/_mapping.

2

Если у вас есть отношения родительский/дочерний, вам нужно указать родителя при индексировании дочернего документа. См. Документы Elasticsearch здесь: http://www.elasticsearch.org/blog/managing-relations-inside-elasticsearch/ Вы не сказали, как вы их индексировали; через завиток он должен выглядеть так, где activity-id является идентификатор родительского документа этого любимца:

curl -XPOST localhost:9200/favorites?parent=activity-id -d' 
{ 
     "favorite_count":3, 
     "details":[ 
      1, 25, 4 
     ] 
}' 
Смежные вопросы