Elasticsearch Mget、GetDocSource、局部更新索引案例

bboss

1.准备工作

参考文档《高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端bboss

2.mget操作

简单而直观的多文档获取案例

  1. ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();
  2. //获取json报文
  3. String response = clientUtil.mgetDocuments("agentinfo",//索引表
  4. "agentinfo",//索引表类型
  5. "10.21.20.168","192.168.0.143");//文档id清单
  6. System.out.println(response);
  7. //获取封装成对象的文档列表,此处是Map对象,还可以是其他用户定义的对象类型
  8. List<Map> docs = clientUtil.mgetDocuments("agentinfo",//索引表
  9. "agentinfo",//索引表类型
  10. Map.class,//返回文档对象类型
  11. "10.21.20.168","192.168.0.143");//文档id清单
  12. System.out.println(docs);

通过执行dsl获取多个文档的内容案例

  1. ClientInterface clientUtil =
  2. ElasticSearchHelper.getConfigRestClientUtil("esmapper/estrace/mget.xml");
  3. //通过执行dsl获取多个文档的内容,具体可以参考文档:
  4. //https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-multi-get.html
  5. List<String> ids = new ArrayList<String>();
  6. ids.add("10.21.20.168");
  7. ids.add("192.168.0.143");
  8. Map params = new HashMap();
  9. params.put("ids",ids);
  10. String response = clientUtil.executeHttp("_mget",
  11. "testMget",//dsl定义名称
  12. params, //存放文档id的参数
  13. ClientUtil.HTTP_POST);
  14. System.out.println(response);
  15. List<Map> docs = clientUtil.mgetDocuments("_mget",
  16. "testMget",//dsl定义名称
  17. params, //存放文档id的参数
  18. Map.class);//返回文档对象类型
  19. System.out.println(docs);

dsl定义-esmapper/estrace/mget.xml

  1. <!--
  2. GET /_mget
  3. {
  4. "docs" : [
  5. {
  6. "_index" : "agentinfo",
  7. "_type" : "agentinfo",
  8. "_id" : "10.21.20.168"
  9. },
  10. {
  11. "_index" : "agentinfo",
  12. "_type" : "agentinfo",
  13. "_id" : "192.168.0.143"
  14. }
  15. ]
  16. }
  17. -->
  18. <property name="testMget">
  19. <![CDATA[
  20. {
  21. "docs" : [
  22. #foreach($id in $ids)
  23. #if($velocityCount > 0),#end
  24. {
  25. "_index" : "agentinfo",
  26. "_type" : "agentinfo",
  27. "_id" : "$id"
  28. }
  29. #end
  30. ]
  31. }
  32. ]]>
  33. </property>

3.更新索引文档部分信息案例

简单api案例

  1. Map params = new HashMap();
  2. Date date = new Date();
  3. params.put("eventTimestamp",date.getTime());
  4. params.put("eventTimestampDate",date);
  5. params.put("location","28.292781,117.238963");
  6. /**
  7. * 更新索引部分内容
  8. */
  9. ClientInterface restClientUtil = ElasticSearchHelper.getRestClientUtil();
  10. String response = restClientUtil.updateDocument("agentinfo",//索引表名称
  11. "agentinfo",//索引type
  12. "pdpagent",//索引id
  13. params,//待更新的索引字段信息
  14. "refresh");//强制刷新索引
  15. System.out.println(response);

采用dsl案例

  1. ClientInterface configRestClientUtil =
  2. ElasticSearchHelper.getConfigRestClientUtil("esmapper/agentstat.xml");
  3. Map params = new HashMap();
  4. Date date = new Date();
  5. params.put("eventTimestamp",date.getTime());
  6. params.put("eventTimestampDate",date);
  7. params.put("location","28.292781,117.238963");
  8. /**
  9. * 采用dsl更新索引部分内容,dsl定义和路径api可以参考文档:
  10. * https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html
  11. */
  12. StringBuilder path = new StringBuilder();
  13. String docid = "pdpagent";
  14. String parentId = "parentId";
  15. path.append("agentinfo/agentinfo/").append(docid ).append("/_update?refresh");//自行拼接rest api地址
  16. //path.append("&routing=").append(parentId );//如果需要指定routing,则使用routing参数
  17. configRestClientUtil.updateByPath(path.toString(),
  18. "updateAgentInfoEndtime",//更新文档内容的dsl配置名称
  19. params);

dsl文件定义-esmapper/agentstat.xml

  1. <properties>
  2. <!--
  3. POST test/_doc/1/_update
  4. {
  5. "doc" : {
  6. "name" : "new_name"
  7. }
  8. }
  9. -->
  10. <property name="updateAgentInfoEndtime">
  11. <![CDATA[
  12. {
  13. "doc" : {
  14. "endTimestamp" : #[eventTimestamp],
  15. "endTimestampDate" : #[eventTimestampDate],
  16. "location":#[location]
  17. }
  18. }
  19. ]]>
  20. </property>
  21. </properties>

4.GetDocSource案例

  1. ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();
  2. //获取json报文索引source,不返回索引元数据
  3. String response = clientUtil.getDocumentSource("agentinfo/agentinfo/10.21.20.168/_source");
  4. System.out.println(response);
  5. //获取对象类型source,此处对象类型是map,可以指定自定义的对象类型,不返回索引元数据
  6. Map data = clientUtil.getDocumentSource("agentinfo/agentinfo/10.21.20.168/_source",Map.class);
  7. System.out.println(data);
  8. //请求地址格式说明:
  9. // index/indexType/docId/_source
  10. // 实例如下:
  11. // "agentinfo/agentinfo/10.21.20.168/_source"

5.几种经典的获取文档数据案例

根据文档id获取

  1. //根据文档id获取文档对象,返回json报文字符串
  2. String response = clientUtil.getDocument("demo",//索引表
  3. "demo",//索引类型
  4. "2");//w
  5. System.out.println("打印结果:getDocument-------------------------");
  6. System.out.println(response);
  7. //根据文档id获取文档对象,返回Demo对象
  8. demo = clientUtil.getDocument("demo",//索引表
  9. "demo",//索引类型
  10. "2",//文档id
  11. Demo.class);

根据rest url获取

  1. ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();
  2. String response = clientUtil.getDocumentByPath("agentinfo/agentinfo/10.21.20.168");
  3. System.out.println(response);
  4. Map data = clientUtil.getDocumentByPath("agentinfo/agentinfo/10.21.20.168",Map.class);
  5. System.out.println(data);
  6. //请求地址格式说明:
  7. // index/indexType/docId
  8. // 实例如下:
  9. // "agentinfo/agentinfo/10.21.20.168"