2015-04-23 1 views
3

Je suis en train d'indexer un document avec des champs dynamiques et l'ont défini:printemps données Solr avec de champ dynamique ne fonctionne pas

@SolrDocument(solrCoreName = "collection1") 
public class SolrProduct { 

    @Field 
    String id; 

    @Field 
    String name; 

    @Field("mappedField_*") 
    Map<String, List<String>> mappedFieldValues; 
} 

Et le repo suivant:

public interface SolrProductRepository extends SolrCrudRepository<SolrProduct, String> { } 

Mon schéma Solr est aussi suit:

<field name="name" type="text_ws" indexed="true" stored="true"/> 
<dynamicField name="mappedField_*" type="text_general" indexed="true" stored="true"/> 

Je suis en train d'enregistrer un nouveau document dans lequel la valeur de la carte mappedFieldValues ​​est:

{thermometer=[yes], camera=[yes], vibration=[Motion], brand=[Philips]}

Pourtant, je reçois l'exception suivante:

org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: 

ERROR: [doc=5530cbd78b15a5f18dfe3d28] unknown field 'thermometer' at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:495) at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:199) at org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:118) at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:116) at org.springframework.data.solr.core.SolrTemplate$4.doInSolr(SolrTemplate.java:178) at org.springframework.data.solr.core.SolrTemplate$4.doInSolr(SolrTemplate.java:175) at org.springframework.data.solr.core.SolrTemplate.execute(SolrTemplate.java:132) at org.springframework.data.solr.core.SolrTemplate.saveBean(SolrTemplate.java:175) at org.springframework.data.solr.core.SolrTemplate.saveBean(SolrTemplate.java:169) at org.springframework.data.solr.repository.support.SimpleSolrRepository.save(SimpleSolrRepository.java:149) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:416) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:401) at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:373) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) at $Proxy60.save(Unknown Source) at com.example.Indexer.indexAll(Indexer.java:29)

Il me semble que le ressort des données -solr n'appelle pas correctement solr avec le nom des champs dynamiques (au lieu de mappedField_thermometer, il appelle simplement thermomètre).

Des idées?

+2

s'il vous plaît jeter un oeil à celui-ci http: // stackoverflow. com/questions/29307653/comment-sérialiser-désérialiser-une-carte-avec-solr-lucene/29340019 # 29340019 –

Répondre

0

données Spring solr soutient champ dynamique cartographie par exemple dans mon projet, j'ai configuré les noms de champs à type d'objet

@org.springframework.data.solr.core.mapping.Dynamic 
@org.apache.solr.client.solrj.beans.Field("*") 
private ListOrderedMap<String, Object> fieldValueMap; 

que vous pouvez voir toutes les valeurs de champ cartes pour cette carte. mais dans votre projet dans la configuration solr, vous avez dit juste cartographier les champs qui commencent par "mappedField_ *" donc si vous changez vos noms de champs à mappedField_yourField cela fonctionnera correctement