Elasticsearch Mget、GetDocSource、索引部分更新案例分享

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

2.mget操作
简单而直观的多文档获取案例   
ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();
		//获取json报文
		String response = clientUtil.mgetDocuments("agentinfo",//索引表
				  "agentinfo",//索引表类型
				  "10.21.20.168","192.168.0.143");//文档id清单
		System.out.println(response);
		//获取封装成对象的文档列表,此处是Map对象,还可以是其他用户定义的对象类型
		List<Map> docs = clientUtil.mgetDocuments("agentinfo",//索引表
			"agentinfo",//索引表类型
			Map.class,//返回文档对象类型
			"10.21.20.168","192.168.0.143");//文档id清单
		System.out.println(docs);


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

dsl定义-esmapper/estrace/mget.xml
<!--
GET /_mget
{
            "docs" : [
                {
                    "_index" : "agentinfo",
                    "_type" : "agentinfo",
                    "_id" : "10.21.20.168"
                },
                {
                     "_index" : "agentinfo",
                    "_type" : "agentinfo",
                    "_id" : "192.168.0.143"
                }
            ]
        }
-->
<property name="testMget">
    <![CDATA[

        {
            "docs" : [
            #foreach($id in $ids)
                #if($velocityCount > 0),#end
                {
                    "_index" : "agentinfo",
                    "_type" : "agentinfo",
                    "_id" : "$id"
                }
            #end
            ]
        }
        ]]>
</property>

3.更新索引文档部分信息案例
简单api案例
       
Map params = new HashMap();
		Date date = new Date();
		params.put("eventTimestamp",date.getTime());
		params.put("eventTimestampDate",date);
		/**
		 * 更新索引部分内容
		 */
		ClientInterface restClientUtil = ElasticSearchHelper.getRestClientUtil();
		String response = restClientUtil.updateDocument("agentinfo",//索引表名称
				"agentinfo",//索引type
				"pdpagent",//索引id
				params,//待更新的索引字段信息
				"refresh");//强制刷新索引
		System.out.println(response);

采用dsl案例
ClientInterface configRestClientUtil = 
ElasticSearchHelper.getConfigRestClientUtil("esmapper/agentstat.xml");
		Map params = new HashMap();
		Date date = new Date();
		params.put("eventTimestamp",date.getTime());
		params.put("eventTimestampDate",date);
		/**
		 * 采用dsl更新索引部分内容,dsl定义和路径api可以参考文档:
		 * https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html
		 */
		StringBuilder path = new StringBuilder();
		path.append("agentinfo/agentinfo/pdpagent/_update?refresh");//自行拼接rest api地址
		configRestClientUtil.updateByPath(path.toString(),
						"updateAgentInfoEndtime",//更新文档内容的dsl配置名称
				         params);

dsl文件定义-esmapper/agentstat.xml
<properties>
    <!--
    POST test/_doc/1/_update
         {
             "doc" : {
             "name" : "new_name"
             }
         }
    -->
    <property name="updateAgentInfoEndtime">
        <![CDATA[
         {
             "doc" : {
                "endTimestamp" : #[eventTimestamp],
                "endTimestampDate" : #[eventTimestampDate]
             }
         }
        ]]>
    </property>
</properties>

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

5.几种经典的获取文档数据案例
根据文档id获取
       
//根据文档id获取文档对象,返回json报文字符串
		String response = clientUtil.getDocument("demo",//索引表
				"demo",//索引类型
				"2");//w

		System.out.println("打印结果:getDocument-------------------------");
		System.out.println(response);
		//根据文档id获取文档对象,返回Demo对象
		demo = clientUtil.getDocument("demo",//索引表
				"demo",//索引类型
				"2",//文档id
				Demo.class);

根据rest url获取
      
 ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();
		String response = clientUtil.getDocumentByPath("agentinfo/agentinfo/10.21.20.168");
		System.out.println(response);
		Map data = clientUtil.getDocumentByPath("agentinfo/agentinfo/10.21.20.168",Map.class);
		System.out.println(data);
		//请求地址格式说明:
		// index/indexType/docId
		// 实例如下:
		// "agentinfo/agentinfo/10.21.20.168"

更多bboss 使用文档可以参考:
https://my.oschina.net/bboss/blog/1556866

猜你喜欢

转载自yin-bp.iteye.com/blog/2414468
今日推荐