gpt4 book ai didi

java - 具有动态字段的 Spring Data Solr 不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:00:11 25 4
gpt4 key购买 nike

我正在尝试用动态字段索引文档并定义它:

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

@Field
String id;

@Field
String name;

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

以及以下 repo :

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 映射的值为:

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

但是,我得到以下异常:

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)

所以在我看来,spring-data-solr 没有正确调用带有动态字段名称的 solr(而不是 mappedField_thermometer,它只是调用温度计)。

有什么想法吗?

最佳答案

Spring Data Solr支持动态字段映射例如在我的项目中,我已经将任何字段名称配置为对象类型

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

如您所见,任何字段值都映射到此 map 。但是在你的 solr 配置项目中,你说过只映射以“mappedField_*”开头的字段,所以如果你将字段名称更改为 mappedField_yourField,它将正常工作

关于java - 具有动态字段的 Spring Data Solr 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29829621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com