我正在尝试使用动态字段索引文档并对其进行定义:
@SolrDocument(solrCoreName = "collection1")
public class SolrProduct {
@Field
String id;
@Field
String name;
@Field("mappedField_*")
Map<String, List<String>> mappedFieldValues;
}
以及以下回购:
public interface SolrProductRepository extends SolrCrudRepository<SolrProduct, String> { }
我的 solr 架构如下:
<field name="name" type="text_ws" indexed="true" stored="true"/>
<dynamicField name="mappedField_*" type="text_general" indexed="true" stored="true"/>
我正在尝试保存一个新文档,其中 mappedFieldValues 映射的值为:
{温度计=[是],相机=[是],振动=[运动],品牌=[飞利浦]}
然而,我得到以下异常:
org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException:
错误:[doc=5530cbd78b15a5f18dfe3d28] org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:495) 中 org.apache.solr.client.solrj.impl.HttpSolrServer 中的未知字段“温度计”。在 org.apache.solr.client.solrj.SolrServer.add(SolrServer.java: 116) 在 org.springframework.data.solr.core.SolrTemplate$4.doInSolr(SolrTemplate.java:175) 在 org.springframework 的 org.springframework.data.solr.core.SolrTemplate$4.doInSolr(SolrTemplate.java:178) .data.solr.core.SolrTemplate.execute(SolrTemplate.java:132) 在 org.springframework.data.solr.core.SolrTemplate.saveBean(SolrTemplate.java:175) 在 org.springframework.data.solr.core。SolrTemplate.saveBean(SolrTemplate.java:169) 在 org.springframework.data.solr.repository.support.SimpleSolrRepository.save(SimpleSolrRepository.java:149) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 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 。核。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) 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 在 org.springframework.aop.framework 的 org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)。 org.springframework.dao.support.PersistenceExceptionTranslationInterceptor 上的 ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)。在 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 调用(PersistenceExceptionTranslationInterceptor.java:136) 在 $Proxy60。在 com.example.Indexer.indexAll(Indexer.java:29) 保存(未知来源)
所以在我看来,spring-data-solr 没有正确调用带有动态字段名称的 solr(而不是 mappedField_thermometer,它只是调用温度计)。
有任何想法吗?