开发者社区 问答 正文

Elasticsearch查询时报错?报错

我在项目中发现如果我添加索引时的对象的属性中包含其他自定义对象,则在查询时会报错,示例如下:

我要添加 的索引对象 如下,属性中包含User对象(关键就在这个User对象)

public class Blog {
	private Integer id;
	private String blogTitle; // 博客标题
	private String blogAbstract; // 博客摘要
	private String blogContent; // 博客内容
	private String blogKey; // 博客关键字
	private BlogCategory blogCategory; // 博客分类

	private User user; // 博客创建者  
}



 添加时的代码如下:

public static Map<String, Object> addIndex(Client client, Blog source,
			String index, String type, String id)
			throws JsonGenerationException, JsonMappingException, IOException {
		Map<String, Object> map = new HashMap<String, Object>();
		byte[] json = mapper.writeValueAsBytes(source);
		IndexResponse response = client.prepareIndex(index, type, id)
				.setSource(json).get();

		map.put("_index", response.getIndex());
		map.put("_type", response.getType());
		map.put("_id", response.getId());
		map.put("_version", response.getVersion());
		map.put("created", response.isCreated()); 
		closeClient(client);
		return map;
	}



添加时不报错,且能正常添加进去:

User属性也能正常添加,但是使用下面的代码查询时就有问题 :

public static List<Blog> queryIndex(Client client, String index,
			String type, String searchKey, String searchValue) throws JsonParseException, JsonMappingException, IOException
			 {
		QueryBuilder qb = new BoolQueryBuilder().must(QueryBuilders.matchQuery(
				searchKey, searchValue));

		SearchResponse response = client.prepareSearch(index).setTypes(type)
				.setQuery(qb).execute().actionGet();

		SearchHit[] hits = response.getHits().getHits();
		List<Blog> blogList = new ArrayList<Blog>();
		for (SearchHit hit : hits) {
//			Blog blog = mapper.readValue(hit.getSourceAsString(), Blog.class);
			Blog blog = mapper.readValue(hit.getSourceAsString(), Blog.class);
			blogList.add(blog);
		}

		client.close();
		return blogList;
	}



报错如下:

[org.elasticsearch.plugins] - [Thunderclap] loaded [], sites []
  org.codehaus.jackson.map.JsonMappingException: Conflicting setter definitions for property "userId": com.blog.entity.User#setUserId(1 params) vs com.blog.entity.User#setUserId(1 params)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:315)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:290)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:159)
	at org.codehaus.jackson.map.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:620)
	at org.codehaus.jackson.map.deser.BeanDeserializer.resolve(BeanDeserializer.java:379)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider._resolveDeserializer(StdDeserializerProvider.java:407)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:352)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:290)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:159)
	at org.codehaus.jackson.map.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:620)
	at org.codehaus.jackson.map.deser.BeanDeserializer.resolve(BeanDeserializer.java:379)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider._resolveDeserializer(StdDeserializerProvider.java:407)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:352)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:290)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:159)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider.findTypedValueDeserializer(StdDeserializerProvider.java:180)
	at org.codehaus.jackson.map.ObjectMapper._findRootDeserializer(ObjectMapper.java:2829)
	at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2728)
	at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1863)
	at com.blog.util.ElasticsearchUtil.queryIndex(ElasticsearchUtil.java:279)
	at com.blog.controller.IndexController.query(IndexController.java:86)
	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:606)
	at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2517)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2506)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: Conflicting setter definitions for property "userId": com.blog.entity.User#setUserId(1 params) vs com.blog.entity.User#setUserId(1 params)
	at org.codehaus.jackson.map.introspect.POJOPropertyBuilder.getSetter(POJOPropertyBuilder.java:199)
	at org.codehaus.jackson.map.deser.BeanDeserializerFactory.addBeanProps(BeanDeserializerFactory.java:1161)
	at org.codehaus.jackson.map.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:707)
	at org.codehaus.jackson.map.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:636)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider._createDeserializer(StdDeserializerProvider.java:401)
	at org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:310)
	... 62 more



求各位这个问题解决地方法 。

展开
收起
爱吃鱼的程序员 2020-06-08 20:43:59 611 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    http://stackoverflow.com/questions/14706600/how-to-solve-conflicting-getter-definitions-for-property-in-jackson

    Json串反序列化User时出错了,User类你还没贴出来。

    夜行侠老师视频教学:es问题汇总
    http://www.itjoin.org/
    1、如何防止索引被删除
    2、搜索的精准性控制
    3、解决搜索中英文数字混合
    4、搜索中in查询
    5、安装问题
    6、es源码内部是如何做到插件化扩展
    7、统计时展示不全
    8、搜索条件过多,内容过长报错
    9、索引某一字段内容太大
    10、自动补全设计
    11、es的分布式如何实现RPC底层
    12、es的分片机制
    13、head插件的使用
    14、es分片和副本级的是原理
    15、如何做到只更新部分数据
    16、数组在index何制定
    17、es搜索结果窗口太大
    18、groupby里如何
    19、es底层新增和删除索引的全过程
    20、es底层检索的全过

    2020-06-08 20:44:15
    赞同 展开评论