Elasticsearch Java API 续


1、使用multi get API可以通过索引名、类型名、文档id一次得到一个文档集合,文档可以来自同一个索引库,也可以来自不同索引库。示例如下:


MultiGetResponse multiGetItemResponses = client.prepareMultiGet()
    .add("twitter", "tweet", "1") //注释1 .add("twitter", "tweet", "2", "3", "4") //注释2 .add("another", "type", "foo") //注释3 .get(); for (MultiGetItemResponse itemResponse : multiGetItemResponses) { //注释4 GetResponse response = itemResponse.getResponse(); if (response.isExists()) { //注释5 String json = response.getSourceAsString(); //注释6 } }

注释1: 通过单一的ID获取一个文档. 

注释2:传入多个id,从相同的索引名/类型名中获取多个文档. 
注释3:可以同时获取不同索引中的文档. 
注释4:遍历结果集. 
注释5:检验文档是否存在. 
注释6:获取文档源.

2、要在Java中实现一个有三级父子关系的嵌套搜索,相关资料很少,发在stackoverflow上以后一个Switzerland的大神很快回复了我,google+stackoverflow很好使。对应的命令行query:

{
      "query": { "has_child": { "type": "instance", "query": { "has_child": { "type": "instance_permission", "query": { "terms": { "uuid": { "index": "user", "type": "user", "id": "5", "path": "uuids" } } } } } } } }

Java api:

TermsLookupQueryBuilder terms = QueryBuilders
                    .termsLookupQuery("uuid") .lookupIndex("user") .lookupType("user") .lookupId("5") .lookupPath("uuids"); HasChildQueryBuilder hQuery = QueryBuilders .hasChildQuery("instance", QueryBuilders .hasChildQuery("instance_permission", terms)); System.out.println("Exectuing Query 1"); System.out.println(hQuery.toString()); SearchResponse searchResponse1 = client .prepareSearch("foo_oa_hr_askforleave") .setQuery(hQuery).execute().actionGet(); System.out.println("There were " + searchResponse1.getHits().getTotalHits() + " results found for Query 1."); System.out.println(searchResponse1.toString()); System.out.println();


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM